home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 26
/
Cream of the Crop 26.iso
/
program
/
wdj0697.zip
/
SDKANN.ZIP
/
SOURCE.ZIP
/
ANNOTATE.RC
< prev
next >
Wrap
Text File
|
1997-05-07
|
151KB
|
6,072 lines
1 RCDATA
begin
"win31wh.hlp\0"
"#1 Dialog Boxes\0"
"Dialog Boxes\0"
"Dialog Boxes\0"
"WDJ SDK Annotation #1"
"\r\n"
"\r\n"
"If a listbox is the first control in a dialog's tab order "
"and the dialog box was not created with the WS_VISIBLE "
"style, the listbox does not correctly draw itself with the "
"focus. "
"\r\n"
"\r\n"
"Reference: p35, March 1993 Windows/DOS Developer's Journal. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
2 RCDATA
begin
"win31wh.hlp\0"
"#2 Property Lists\0"
"Property Lists\0"
"Property Lists\0"
"WDJ SDK Annotation #2"
"\r\n"
"\r\n"
"The oft-quoted maxim that using window properties is slower "
"than using class or window extra bytes (via "
"GetWindowWord()/SetWindowWord()) is totally false if you use "
"a global atom rather than a string to name the property. "
"Properties were about 20% slower than window words under "
"Windows 3.0, but under Windows 3.1 GetProp() is about 300% "
"faster than GetWindowWord(). "
"\r\n"
"\r\n"
"Reference: p 49, March 1993 Windows/DOS Developer's Journal. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
3 RCDATA
begin
"win31wh.hlp\0"
"#3 WM_MOUSEMOVE (2.x)\0"
"WM_MOUSEMOVE\0"
"WM_MOUSEMOVE (2.x)\0"
"WDJ SDK Annotation #3"
"\r\n"
"\r\n"
"The documentation incorrectly states that the x and y "
"arguments are in screen coordinates. They are in client "
"coordinates. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
4 RCDATA
begin
"win31wh.hlp\0"
"#4 (revised) SetWindowsHookEx (3.1)\0"
"SetWindowsHookEx\0"
"SetWindowsHookEx (3.1)\0"
"WDJ SDK Annotation #4 (revised)"
"\r\n"
"\r\n"
"SetWindowsHookEx() has a bug: using it to install a "
"task-specific hook can cause various failures. The "
"workaround is to pass it a module handle rather than an "
"instance handle. You can obtain a module handle from "
"GetModuleHandle(). If you only have the current instance "
"handle and not the name of the module, use the following "
"undocumented hack under Windows 3.1: "
"\r\n"
"\r\n"
"GetModuleHandle(MAKELP(0,hInstance)); "
"\r\n"
"\r\n"
"If you #include <windowsx.h>, you can instead use the macro "
"GetInstanceModule(hInstance). Under Windows NT, just pass a "
"NULL to obtain the handle of the current process. Note that "
"the MSDN News article on this subject has the arguments to "
"MAKELP() backwards. "
"\r\n"
"\r\n"
"\r\n"
"Reference: MSDN News #1, 1993 "
"Revised by: Tom Nolan "
"\r\n"
"\r\n"
"\0\0\0\0"
end
5 RCDATA
begin
"win31wh.hlp\0"
"#5 CS_BYTEALIGNWINDOW 0x2000\0"
"CS_BYTEALIGNWINDOW\0"
"CS_BYTEALIGNWINDOW 0x2000\0"
"WDJ SDK Annotation #5"
"\r\n"
"\r\n"
"The documentation makes it sound like this style bit is the "
"one you want for efficient bitblts. In fact, most of your "
"bitblts will be to the client area of the window, not the "
"non-client area, so CS_BYTEALIGNCLIENT is the style bit you "
"should set if you are concerned about bitblt operation "
"efficiency. Unaligned windows are slower at VGA resolution, "
"but typically not an issue with higher resolution "
"adapters (such as 256-color SVGA). "
"\r\n"
"\r\n"
"Reference: p65, December 1993 Windows/DOS Developer's Journal. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
6 RCDATA
begin
"win31wh.hlp\0"
"#6 CODE Module Definition Statement\0"
"CODE Module Definition Statement\0"
"CODE Module Definition Statement\0"
"WDJ SDK Annotation #6"
"\r\n"
"\r\n"
"The documentation for the FIXED attribute is incorrect. "
"Under Windows 3.1, if you mark code or data segments in your "
".exe FIXED, the loader ignores that attribute -- the "
"segments will be moveable. If you mark code or data "
"segments in your .dll FIXED, however, the loader will make "
"them fixed and will page lock them as well. Due to the "
"implementation of GlobalPageLock(), that can result in your "
"segments using up precious DOS memory, eventually preventing "
"Windows from spawning new applications (since each new "
"application needs at least 512 bytes of DOS memory for a "
"task database entry). The October 1994 Windows "
"Developer's Journal provides code to allocate fixed memory "
"without using up precious conventional memory. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
7 RCDATA
begin
"win31wh.hlp\0"
"#7 WS_EX_TRANSPARENT 0x00000020L\0"
"WS_EX_TRANSPARENT\0"
"WS_EX_TRANSPARENT 0x00000020L\0"
"WDJ SDK Annotation #7"
"\r\n"
"\r\n"
"Note that this bit does not really create transparent "
"windows. If you create a window with this style, it is true "
"that the windows below it will show through as its "
"background. However, if you then move your new window, it "
"will have the same background as it did in its original "
"position -- blotting out whatever it is covering in its new "
"position. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
8 RCDATA
begin
"win31wh.hlp\0"
"#8 WM_NCHITTEST (2.x)\0"
"WM_NCHITTEST\0"
"WM_NCHITTEST (2.x)\0"
"WDJ SDK Annotation #8"
"\r\n"
"\r\n"
"You can process this message to allow the user to drag a "
"window that does not have a title bar. When you receive a "
"WM_NCHITTEST message and the mouse is in your client area "
"(or whatever conditions you want to start the drag), just "
"return HTCAPTION rather than passing the message on to "
"DefWindowProc(). "
"\r\n"
"\r\n"
"Reference: p 37, March 1993 Windows/DOS Developer's Journal. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
9 RCDATA
begin
"win31wh.hlp\0"
"#9 WM_TIMER (2.x)\0"
"WM_TIMER\0"
"WM_TIMER (2.x)\0"
"WDJ SDK Annotation #9"
"\r\n"
"\r\n"
"Although it sounds odd, you can use a WM_TIMER message as a "
"way to kill another application, if you can obtain the "
"handle of the main of the application you want to kill. "
"Create a timer callback function that does nothing but pass "
"its first argument (window handle) to DestroyWindow(). Then "
"use PostMessage() to post (to the other app's main window) a "
"WM_TIMER message that points to your callback function. "
"Your timer callback will get executed in the context of the "
"target application. "
"\r\n"
"\r\n"
"Reference: p 64, September 1992 Windows/DOS Developer's Journal. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
10 RCDATA
begin
"win31wh.hlp\0"
"#10 MemoryWrite (3.1)\0"
"MemoryWrite\0"
"MemoryWrite (3.1)\0"
"WDJ SDK Annotation #10"
"\r\n"
"\r\n"
"MemoryWrite() has a bug in it: it trashes the high 16 bits "
"of the EDI register (the 32-bit version of the DI register). "
"The workaround is to save the register before calling "
"MemoryWrite() and restore it afterward. "
"\r\n"
"\r\n"
"Reference: p. 71, April 1994 Windows/DOS Developer's Journal "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
11 RCDATA
begin
"win31wh.hlp\0"
"#11 EscapeCommFunction (2.x)\0"
"EscapeCommFunction\0"
"EscapeCommFunction (2.x)\0"
"WDJ SDK Annotation #11"
"\r\n"
"\r\n"
"The documentation omits one potential value for the "
"nFunction parameter, although it is defined in windows.h. "
"The name is GETBASEIRQ and it returns the base address of "
"the COM port in the lower word and the IRQ setting in the "
"high word. If the high word is -1 the port doesn't exist; "
"if it is 0, the comm driver does not support this escape "
"(which is the case, for example with some kinds of enhanced "
"serial boards). "
"\r\n"
"\r\n"
"Submitted by: Thomas Zeisluft "
"\r\n"
"\r\n"
"\0\0\0\0"
end
12 RCDATA
begin
"win31wh.hlp\0"
"#12 MessageBox (2.x)\0"
"MessageBox\0"
"MessageBox (2.x)\0"
"WDJ SDK Annotation #12"
"\r\n"
"\r\n"
"Do not call MessageBox() from within the LibMain() of an "
"implicitly-linked DLL. It will fail because the application "
"will not yet have a message queue at that point, and "
"MessageBox() (or anything else) cannot create its window "
"when the message queue does not yet exist. Once the "
"application executes its internal startup code and calls "
"InitApp(), then it has a message queue and can safely call "
"functions that create windows. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
13 RCDATA
begin
"win31wh.hlp\0"
"#13 LB_ADDSTRING (2.x)\0"
"LB_ADDSTRING\0"
"LB_ADDSTRING (2.x)\0"
"WDJ SDK Annotation #13"
"\r\n"
"\r\n"
"If you are changing the contents of a listbox (for example, "
"by adding or deleting multiple strings), you may want to "
"minimize screen redrawing and maximize speed by disabling "
"window redrawing during your operation. Follow these steps: "
"\r\n"
"\r\n"
" 1) Send a WM_SETREDRAW with wParam equal to FALSE to the listbox.\r\n"
" 2) Perform your adds or deletes.\r\n"
" 3) Send a WM_SETREDRAW with wParam equal to TRUE to the listbox.\r\n"
" 4) Use InvalidateRect() to force the listbox to redraw itself.\r\n"
"\r\n"
"Revised by V. Ramachandran "
"\r\n"
"\r\n"
"\0\0\0\0"
end
14 RCDATA
begin
"win31wh.hlp\0"
"#14 RegisterWindowMessage (2.x)\0"
"RegisterWindowMessage\0"
"RegisterWindowMessage (2.x)\0"
"WDJ SDK Annotation #14"
"\r\n"
"\r\n"
"Do you really need to register a private window message? "
"Probably not, if all you need is an intra-app message number "
"that does not conflict with any Windows message numbers. "
"Microsoft has revised its statement about what message "
"numbers are available for your private use. Microsoft now "
"guarantees that you can use message numbers 0x8000 through "
"0xBFFF and they will not conflict with any system messages. "
"They also claim the next SDK (Chicago?) will define WM_APP "
"equal to 0x8000 in windows.h. "
"\r\n"
"\r\n"
"Reference: Microsoft Knowledge Base article Q86835 "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
15 RCDATA
begin
"win31wh.hlp\0"
"#15 WM_CHAR (2.x)\0"
"WM_CHAR\0"
"WM_CHAR (2.x)\0"
"WDJ SDK Annotation #15"
"\r\n"
"\r\n"
"The documentation incorrectly claims that wParam is the "
"virtual key code. In fact, it is the ASCII value of the key "
"pressed. For example, pressing the '$' (ASCII 0x5B) key "
"produces a wParam equal to 0x5B -- if you interpreted that "
"as a virtual key code, you would incorrectly believe that "
"the user had pressed VK_HOME! "
"\r\n"
"\r\n"
"Submitted by: Brent Rector "
"\r\n"
"\r\n"
"\0\0\0\0"
end
16 RCDATA
begin
"win31wh.hlp\0"
"#16 WinHelp (3.0)\0"
"WinHelp\0"
"WinHelp (3.0)\0"
"WDJ SDK Annotation #16"
"\r\n"
"\r\n"
"The documentation says that the return value is nonzero if "
"WinHelp() is successful. In fact, WinHelp() only returns "
"failure for systemic problems, like being unable to allocate "
"global memory, or being unable to spawn winhelp.exe. If "
"WinHelp() successfully passes your request to winhelp.exe, "
"it returns success, period. So, for example, if the named "
"help file is invalid, or you try to jump to a help topic "
"that does not exist, or any number of other logical errors, "
"WinHelp() still returns success. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
17 RCDATA
begin
"win31wh.hlp\0"
"#17 WM_ENTERIDLE (2.x)\0"
"WM_ENTERIDLE\0"
"WM_ENTERIDLE (2.x)\0"
"WDJ SDK Annotation #17"
"\r\n"
"\r\n"
"The documentation says that this messsage gets sent to your "
"application's \042main window\042. In fact, a dialog sends the "
"WM_ENTERIDLE message to its own parent window, which may or "
"may not happen to be your application's main window. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
18 RCDATA
begin
"win31wh.hlp\0"
"#18 OPENFILENAME (3.1)\0"
"OPENFILENAME\0"
"OPENFILENAME (3.1)\0"
"WDJ SDK Annotation #18"
"\r\n"
"\r\n"
"The documentation does not completely describe the behavior "
"when selecting multiple files. To allow the user to select "
"multiple files, you turn on the flag OFN_ALLOWMULTISELECT. "
"If you do that and call GetOpenFileName(), and if the user then "
"selects multiple files, then GetOpenFileName() will copy (into "
"lpstrFile) the path, followed by a space, followed by "
"space-separated filenames. For example, if the user "
"selected files \042fred.1\042 and \042fred.2\042 from directory "
"\042c:\\test\042, lpstrFile would then point to the following "
"string: "
"\r\n"
"\r\n"
" \042c:\\test fred.1 fred.2\042\r\n"
"\r\n"
"However, the documentation does not point out that if the "
"user selects only one file, then the path is not kept "
"separate from the filename. Using the previous example, if "
"the user selected only file \042fred.1\042, then lpstrFile would "
"point to this: "
"\r\n"
"\r\n"
" \042c:\\test\\fred.1\042\r\n"
"\r\n"
"Submitted by Julian Templeman "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
19 RCDATA
begin
"win31wh.hlp\0"
"#19 CreateRoundRectRgn (3.0)\0"
"CreateRoundRectRgn\0"
"CreateRoundRectRgn (3.0)\0"
"WDJ SDK Annotation #19"
"\r\n"
"\r\n"
"This function has a bug. It will produce a GP fault if the "
"region rectangle is empty (either nLeftRect equals "
"nRightRect, or nBottomRect equals nTopRect). About the only "
"workaround is to create a wrapper function that first checks "
"whether the rectangle is empty. "
"\r\n"
"\r\n"
"Reference: p67, June 1994 Windows/DOS Developer's Journal\r\n"
"Submitted by Chris Mason "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
20 RCDATA
begin
"win31wh.hlp\0"
"#20 EnableMenuItem (2.x)\0"
"EnableMenuItem\0"
"EnableMenuItem (2.x)\0"
"WDJ SDK Annotation #20"
"\r\n"
"\r\n"
"When you are making changes to a window menu, the menu bar "
"is not immediately updated. To force those changes (such as "
"enabling/disabling menu items) to be visible right away, "
"make sure you call DrawMenuBar(). "
"\r\n"
"\r\n"
"\0\0\0\0"
end
21 RCDATA
begin
"win31wh.hlp\0"
"#21 DrawText (2.x)\0"
"DrawText\0"
"DrawText (2.x)\0"
"WDJ SDK Annotation #21"
"\r\n"
"\r\n"
"DrawText() has an off-by-one error that can result in a GP "
"fault. The bug is evoked when you use pass an explicit "
"string length instead of NULL-terminating the text string. "
"The bug is not evoked if you use the DT_NOPREFIX flag, or if "
"you NULL-terminate the text string (the easiest workaround). "
"\r\n"
"\r\n"
"Reference: p53, August 1994 Windows/DOS Developer's Journal "
"\r\n"
"\r\n"
"\0\0\0\0"
end
22 RCDATA
begin
"win31wh.hlp\0"
"#22 WM_MEASUREITEM (3.0)\0"
"WM_MEASUREITEM\0"
"WM_MEASUREITEM (3.0)\0"
"WDJ SDK Annotation #22"
"\r\n"
"\r\n"
"Windows supports owner-draw menus, but only popup owner-draw "
"menus work correctly. If you try to create an owner-draw "
"menubar for a window, Windows will not send you the "
"WM_MEASUREITEM message as it should. "
"\r\n"
"\r\n"
"Reference: Microsoft Knowledge Base article Q69969 "
"\r\n"
"\r\n"
"\0\0\0\0"
end
23 RCDATA
begin
"win31wh.hlp\0"
"#23 WINDOWPOS (3.1)\0"
"WINDOWPOS\0"
"WINDOWPOS (3.1)\0"
"WDJ SDK Annotation #23"
"\r\n"
"\r\n"
"The documentation says that y is \042the position of the right "
"edge of the window\042. It is, of course, the position of the "
"top edge of the window. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
24 RCDATA
begin
"win31wh.hlp\0"
"#24 Shell Dynamic-Data Exchange Interface Overview (3.1)\0"
"Shell Dynamic-Data Exchange Interface Overview\0"
"Shell Dynamic-Data Exchange Interface Overview (3.1)\0"
"WDJ SDK Annotation #24"
"\r\n"
"\r\n"
"The documentation says you can use DDE to get a list of "
"Program Manager groups by \042issuing a request for the Group "
"item.\042 In fact, that is not the correct item name -- you "
"must use 'Groups', not 'Group'. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
25 RCDATA
begin
"win31wh.hlp\0"
"#25 TrackPopupMenu (3.0)\0"
"TrackPopupMenu\0"
"TrackPopupMenu (3.0)\0"
"WDJ SDK Annotation #25"
"\r\n"
"\r\n"
"The documentation incorrectly states that you can pass the "
"TPM_RIGHTBUTTON flag if you want the menu to respond to the "
"right (secondary) mouse button instead of the left (primary) "
"mouse button. In fact, passing TPM_RIGHTBUTTON causes the "
"menu to respond to the right mouse button as well as the "
"left. There is apparently no combination of bits that cause "
"the menu to respond only to the right mouse button. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
26 RCDATA
begin
"win31wh.hlp\0"
"#26 SetDlgItemText (2.x)\0"
"SetDlgItemText\0"
"SetDlgItemText (2.x)\0"
"WDJ SDK Annotation #26"
"\r\n"
"\r\n"
"There is a bug in Windows that keeps SetWindowText() and "
"SetDlgItemText() from working correctly when applied to an "
"edit control owned by another application. Rather than "
"sending a WM_SETTEXT to the edit control as they should, "
"these functions directly tinker with the target control's "
"internal window structure to change its title. The bug, "
"then, is twofold: "
"\r\n"
"\r\n"
" a) The target window is never notified that it\r\n"
" needs to repaint.\r\n"
" b) An edit control ignores its title, so changing\r\n"
" its title does not affect the text it contains.\r\n"
"\r\n"
"The workaround is to use SendMessage() or PostMessage() to "
"deliver a WM_SETTEXT to the target window. If you use "
"PostMessage(), make sure you pass a string pointer that is "
"somehow guaranteed to still be valid whenever the target "
"application gets around to fetching and processing the "
"message. "
"\r\n"
"\r\n"
"Reference: p. 71, September 1993 Windows/DOS Developer's Journal "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
27 RCDATA
begin
"win31wh.hlp\0"
"#27 GetMenuItemID (2.x)\0"
"GetMenuItemID\0"
"GetMenuItemID (2.x)\0"
"WDJ SDK Annotation #27"
"\r\n"
"\r\n"
"The documentation says that this function returns 0 if the "
"specified menu item is a separator. In fact, although the "
"resource compiler implicitly assigns separators an ID of 0, "
"you can assign them any 16-bit ID you like (with "
"ModifyMenu(), InsertMenu(), etc.) and this function will "
"return the correct ID, not just zero. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
28 RCDATA
begin
"win31wh.hlp\0"
"#28 GetMetaFile (2.x)\0"
"GetMetaFile\0"
"GetMetaFile (2.x)\0"
"WDJ SDK Annotation #28"
"\r\n"
"\r\n"
"Most programs that write a \042Windows metafile\042 to disk use a "
"newer file format that this function does not understand. "
"Most programs read and write \042placeable\042 metafiles, a "
"metafile with a 22-byte header that contains a minimum "
"bounding rectangle for the figure. If you want to read in a "
"metafile that may have been written by another application, "
"you should open the file yourself and check the header to "
"see if it is a placeable metafile. See the SDK "
"documentation for a description of \042placeable Windows "
"metafiles\042. "
"\r\n"
"\r\n"
"Reference: p. 43, November 1994 Windows/DOS Developer's Journal "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
29 RCDATA
begin
"win31wh.hlp\0"
"#29 WritePrivateProfileString (3.0)\0"
"WritePrivateProfileString\0"
"WritePrivateProfileString (3.0)\0"
"WDJ SDK Annotation #29"
"\r\n"
"\r\n"
"The documentation for WritePrivateProfileString() and the "
"prototypes in windows.h, indicate that all strings passed in "
"are LPCSTR (32-bit pointer to unmodifiable character "
"string). However, sometimes this function writes on your "
"input string anyway! For one example, if you pass in the "
"string "
"\r\n"
"\r\n"
"\042Hello World \042 "
"\r\n"
"\r\n"
"the function will remove the trailing spaces by writing a "
"NULL byte after the 'd'. If you were passing in a constant "
"string that resided in a code segment, this aberrant "
"behavior could result in a GP fault. This function "
"absolutely should not modify a string declared as LPCSTR, "
"but since it does, beware! "
"\r\n"
"\r\n"
"Submitted by Charles Leamon "
"\r\n"
"\r\n"
"\0\0\0\0"
end
30 RCDATA
begin
"win31wh.hlp\0"
"#30 GetMenuState (2.x)\0"
"GetMenuState\0"
"GetMenuState (2.x)\0"
"WDJ SDK Annotation #30"
"\r\n"
"\r\n"
"In addition to the bits noted in the documentation, this "
"function also correctly returns MF_POPUP for a submenu. "
"Oddly, if you located the popup by position, the "
"MF_BYPOSITION flag will also be set in the returned flags, "
"although it is not on when used to locate normal menu items. "
"Note that some of these flags equate to zero, so you cannot "
"just AND them with the returned flags to see if they are on. "
"Here are the flags that equate to zero, along with the "
"expression you can use to infer their presence: "
"\r\n"
"\r\n"
" Zero Flag Expression to test for flag\r\n"
" ============== =================================\r\n"
" MF_ENABLED !(Flag&~(MF_DISABLED|MF_GRAYED)) \r\n"
" MF_UNCHECKED !(Flag&~MF_CHECKED) \r\n"
" MF_STRING !(Flag&~(MF_BITMAP|MF_OWNERDRAW))\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
31 RCDATA
begin
"win31wh.hlp\0"
"#31 GetWindowPlacement (3.1)\0"
"GetWindowPlacement\0"
"GetWindowPlacement (3.1)\0"
"WDJ SDK Annotation #31"
"\r\n"
"\r\n"
"From the documentation, you might think the following code "
"would work: "
"\r\n"
"\r\n"
" WINDOWPLACEMENT Info;\r\n"
" GetWindowPlacement(hWnd, &Info);\r\n"
"\r\n"
"In fact, it won't. You must remember to initialize the "
"\042length\042 field of the structure before calling this "
"function. The following code works: "
"\r\n"
"\r\n"
" WINDOWPLACEMENT Info;\r\n"
" Info.length = sizeof(Info);\r\n"
" GetWindowPlacement(hWnd, &Info);\r\n"
"\r\n"
"Submitted by Pete Davis "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
32 RCDATA
begin
"win31wh.hlp\0"
"#32 CreateCompatibleBitmap (2.x)\0"
"CreateCompatibleBitmap\0"
"CreateCompatibleBitmap (2.x)\0"
"WDJ SDK Annotation #32"
"\r\n"
"\r\n"
"The description of height and width parameters states that "
"these values are in bits, when actually they are in pixels. "
"\r\n"
"\r\n"
"Submitted by Charles Leamon "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
33 RCDATA
begin
"win31wh.hlp\0"
"#33 LoadCursor (2.x)\0"
"LoadCursor\0"
"LoadCursor (2.x)\0"
"WDJ SDK Annotation #33"
"\r\n"
"\r\n"
"The documentation says that you should call DestroyCursor() "
"for cursors loaded via LoadCursor(). That is wrong -- you "
"should only call DestroyCursor() for cursors created with "
"CreateCursor(). "
"\r\n"
"\r\n"
"Submitted by Charles Leamon\r\n"
"Reference: Microsoft Knowledge Base article Q84779 "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
34 RCDATA
begin
"win31wh.hlp\0"
"#34 lstrcpyn (3.1)\0"
"lstrcpyn\0"
"lstrcpyn (3.1)\0"
"WDJ SDK Annotation #34"
"\r\n"
"\r\n"
"The documentation for lstrcpyn() states that the last "
"parameter (cChars) is the number of characters to be copied, "
"when in fact the number of characters will be cChars-1. "
"That's convenient, but it's not what it says and it's "
"inconsistent with the standard ANSI C run-time function "
"strncpy(), which does copy the specified count. In other "
"words, unlike strncpy(), this function always "
"NULL-terminates the destination string. "
"\r\n"
"\r\n"
"Submitted by Charles Leamon "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
35 RCDATA
begin
"win31wh.hlp\0"
"#36 ExitWindows (3.0)\0"
"ExitWindows\0"
"ExitWindows (3.0)\0"
"WDJ SDK Annotation #36"
"\r\n"
"\r\n"
"The documentation is incomplete. To just terminate Windows "
"and return control to DOS, pass a zero in the dwReturnCode "
"parameter. "
"\r\n"
"\r\n"
"Submitted by Charles Leamon\r\n"
"Reference: Microsoft Knowledge Base article Q100359 "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
36 RCDATA
begin
"win31wh.hlp\0"
"#37 OpenFile (2.x)\0"
"OpenFile\0"
"OpenFile (2.x)\0"
"WDJ SDK Annotation #37"
"\r\n"
"\r\n"
"\r\n"
"The descriptions for OF_CANCEL and OF_PROMPT are incorrect. "
"OF_CANCEL does not add a cancel button to the 'File not "
"found' (OF_PROMPT) dialog. Even if it did, how would the "
"caller know the user pressed the cancel button (only one "
"error return is defined for OpenFile())? The OF_PROMPT "
"dialog does not prompt the user to insert a diskette into "
"drive A: "
"\r\n"
"\r\n"
"Submitted by Charles Leamon "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
37 RCDATA
begin
"win31wh.hlp\0"
"#38 WM_NCHITTEST (2.x)\0"
"WM_NCHITTEST\0"
"WM_NCHITTEST (2.x)\0"
"WDJ SDK Annotation #38"
"\r\n"
"\r\n"
"The documentation claims that this message is sent to the "
"window that used SetCapture() to capture mouse input. That "
"is totally false. The window whose handle is passed to "
"SetCapture() will never receive any WM_NCHITTEST messages "
"(no matter where you move the moust) while the mouse is "
"captured. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
38 RCDATA
begin
"win31wh.hlp\0"
"#39 TabbedTextOut (3.0)\0"
"TabbedTextOut\0"
"TabbedTextOut (3.0)\0"
"WDJ SDK Annotation #39"
"\r\n"
"\r\n"
"The documentation claims that the tab stops are in device "
"units (pixels), but that is not true. The tab stops are "
"treated as logical units, not device units. "
"\r\n"
"\r\n"
"Submitted by Dan Miser\r\n"
"Reference: Microsoft Knowledge Base article Q113253 "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
39 RCDATA
begin
"win31wh.hlp\0"
"#40 LoadIcon (2.x)\0"
"LoadIcon\0"
"LoadIcon (2.x)\0"
"WDJ SDK Annotation #40"
"\r\n"
"\r\n"
"The documentation says that you should call DestroyIcon() "
"for cursors loaded via LoadIcon(). That is wrong -- you "
"should only call DestroyIcon() for icons created with "
"CreateIcon(). "
"\r\n"
"\r\n"
"Submitted by Charles Leamon\r\n"
"Reference: Microsoft Knowledge Base article Q84779 "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
40 RCDATA
begin
"win31wh.hlp\0"
"#41 COMPAREITEMSTRUCT (3.0)\0"
"COMPAREITEMSTRUCT\0"
"COMPAREITEMSTRUCT (3.0)\0"
"WDJ SDK Annotation #41"
"\r\n"
"\r\n"
"Note that Windows has to send a WM_COMPAREITEM message when "
"a new item is added to the list, in order to determine its "
"correct position. That means it does not know the position "
"of the new item yet, so (contrary to the documentation) the "
"itemID2 field in this structure will be -1 -- do not assume "
"it will be a legal index value. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
41 RCDATA
begin
"win31wh.hlp\0"
"#42 GetProcAddress (2.x)\0"
"GetProcAddress\0"
"GetProcAddress (2.x)\0"
"WDJ SDK Annotation #42"
"\r\n"
"\r\n"
"In attempting to locate the named function in the target "
"module, GetProcAddress() converts the function name to "
"uppercase and then performs a case-sensitive search. That "
"means that GetProcAddress() cannot locate functions exported "
"with names containing lowercase characters. Normally, "
"that's not a problem, as the __pascal calling sequence "
"forces uppercase names. However, depending on the compiler "
"and linker tools and options you use, it is possible to "
"export __cdecl calling sequence functions with lowercase "
"characters, resulting in a function that GetProcAddress() "
"cannot locate. "
"\r\n"
"\r\n"
"Submitted by Keith Bluestone "
"\r\n"
"\r\n"
"\0\0\0\0"
end
42 RCDATA
begin
"win31wh.hlp\0"
"#43 SetScrollRange (2.x)\0"
"SetScrollRange\0"
"SetScrollRange (2.x)\0"
"WDJ SDK Annotation #43"
"\r\n"
"\r\n"
"The documentation says you can use this function to hide or "
"show standard scroll bars, but does not tell you how! "
"Basically, if you specify the same value for both the "
"minimum (nMin) and maximum (nMax) scrolling positions, the "
"function will hide the scroll bar. If the two positions are "
"not equal, the function will display the scroll bar. "
"\r\n"
"\r\n"
"Submitted by Paul Bonneau "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
43 RCDATA
begin
"win31wh.hlp\0"
"#44 LoadLibrary (2.x)\0"
"LoadLibrary\0"
"LoadLibrary (2.x)\0"
"WDJ SDK Annotation #44"
"\r\n"
"\r\n"
"If LoadLibrary() cannot find the library, it may display an "
"error message to the user, depending upon the state of "
"Windows' \042error mode\042. If you want to handle that case "
"yourself and make sure Windows does not display the error "
"message, see the documentation for the function "
"SetErrorMode(). For example, the following code attempts to "
"load the library ctl3d.dll, but does not emit an error "
"message if it is not found. "
"\r\n"
"\r\n"
"HINSTANCE Ctl3d;\r\n"
"UINT OldFlag = SetErrorMode(SEM_NOOPENFILEERRORBOX);\r\n"
"Ctl3d = LoadLibrary(\042ctl3d.dll\042);\r\n"
"SetErrorMode(OldFlag); // restore previous mode\r\n"
"if(Ctl3d <= HINSTANCE_ERROR)\r\n"
" // LoadLibrary() failed for some reason\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
44 RCDATA
begin
"win31wh.hlp\0"
"#45 LoadLibrary (2.x)\0"
"LoadLibrary\0"
"LoadLibrary (2.x)\0"
"WDJ SDK Annotation #45"
"\r\n"
"\r\n"
"\r\n"
"The documentation claims this function returns an error code "
"of 0 if \042System was out of memory, executable file was "
"corrupt, or relocations were invalid\042. However, if a "
"library's LibMain() function returns 0 (signifying some "
"logical error during initialization), LoadLibrary() also "
"returns 0. Therefore, do not assume that a 0 error code "
"means the system was out of memory or that the module was "
"corrupt in some way. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
45 RCDATA
begin
"win31wh.hlp\0"
"#46 DdeClientTransaction (3.1)\0"
"DdeClientTransaction\0"
"DdeClientTransaction (3.1)\0"
"WDJ SDK Annotation #46"
"\r\n"
"\r\n"
"The documentation does not say so, but the cbData argument "
"(length of data) must include the NULL byte if the data is a "
"string. In other words, if lpvData is a string, cbData must "
"be set to strlen(lpvData)+1. Otherwise, bad things may "
"happen in DDEML when you perform an XTYP_POKE or "
"XTYP_EXECUTE. "
"\r\n"
"\r\n"
"Submitted by Mark Reha\r\n"
"Reference: Microsoft Knowledge Base article Q107387. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
46 RCDATA
begin
"win31wh.hlp\0"
"#47 WinHelp (3.0)\0"
"WinHelp\0"
"WinHelp (3.0)\0"
"WDJ SDK Annotation #47"
"\r\n"
"\r\n"
"The WinHelp() API function normally allows one to execute "
"macros, jumps, popups, and so on. However, if WinHelp was "
"started with WinExec() (i.e. from Program Manager or File "
"Manager) instead of the WinHelp() API function, you will not "
"be able to execute macros or jumps on that help file without "
"starting up a second instance of the help file using the "
"WinHelp() API function. "
"\r\n"
"\r\n"
"There is one way around this. You can create a DLL with an "
"LDLLHandler that gets the callback address for the FAPI() "
"function from WinHelp. FAPI() has the same parameters as "
"the WinHelp() API function except that the first parameters "
"(HWND) is not in FAPI() (so FAPI() only has 3 parameters). "
"The FAPI() function will allow you to execute macros, jumps, "
"popups, etc regardless of how WinHelp was launched. For "
"more information, get the Windows Help Authors Guide from "
"the MSDN CD-ROM or see Jim Mischel's book \042The Developer's "
"Guide to WINHELP.EXE\042. "
"\r\n"
"\r\n"
"Submitted by Pete Davis "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
47 RCDATA
begin
"win31wh.hlp\0"
"#48 _fpmath (2.x)\0"
"_fpmath\0"
"_fpmath (2.x)\0"
"WDJ SDK Annotation #48"
"\r\n"
"\r\n"
"When setting the handler for coprocessor error exceptions "
"(function 3), the documentation incorrectly says you should "
"place the address of your exception handler in DS:AX. The "
"correct registers to use for this 32-bit address are DX:AX. "
"\r\n"
"\r\n"
"Submitted by Manfred Keul "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
48 RCDATA
begin
"win31wh.hlp\0"
"#49 VerQueryValue (3.1)\0"
"VerQueryValue\0"
"VerQueryValue (3.1)\0"
"WDJ SDK Annotation #49"
"\r\n"
"\r\n"
"Amazingly, even though the second parameter to this function "
"is declared const (LPCSTR), VerQueryValue() modifies that "
"string anyway! Apparently the code replaces a '\\' in your "
"string with a NULL byte temporarily and then puts it back. "
"This is a bug. For example, suppose you use a compiler "
"option that places constant strings in read-only code "
"segments (for Microsoft, \042/Gf\042; for Borland \042-dc\042). In that "
"case, passing such a constant string as the second argument "
"to this function results in a GP fault. "
"\r\n"
"\r\n"
"Submitted by David Lowndes "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
49 RCDATA
begin
"win31wh.hlp\0"
"#50 GetProfileString (2.x)\0"
"GetProfileString\0"
"GetProfileString (2.x)\0"
"WDJ SDK Annotation #50"
"\r\n"
"\r\n"
"This applies to both GetProfileString() and "
"GetPrivateProfileString(). If the default value for these "
"functions contains trailing blanks and the default value is "
"used because the key did not appear in the INI file, Windows "
"will null-terminate the string (even though it is declared "
"const!) at the first trailing blank. If that string is a "
"literal string and the code is compiled with some "
"optimizations then the string will end up in a code segment, "
"resulting in a GPF when the API function attempts to modify "
"it. "
"\r\n"
"\r\n"
"GetProfileString() and GetPrivateProfileString() also strip "
"out any leading spaces, and any leading and trailing quotes "
"(single or double quotes). "
"\r\n"
"\r\n"
"Submitted by Michael E. Kropp.\r\n"
"Revised by Kai Riihioja "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
50 RCDATA
begin
"win31wh.hlp\0"
"#50 GetPrivateProfileString (2.x)\0"
"GetPrivateProfileString\0"
"GetPrivateProfileString (2.x)\0"
"WDJ SDK Annotation #50"
"\r\n"
"\r\n"
"This applies to both GetProfileString() and "
"GetPrivateProfileString(). If the default value for these "
"functions contains trailing blanks and the default value is "
"used because the key did not appear in the INI file, Windows "
"will null-terminate the string (even though it is declared "
"const!) at the first trailing blank. If that string is a "
"literal string and the code is compiled with some "
"optimizations then the string will end up in a code segment, "
"resulting in a GPF when the API function attempts to modify "
"it. "
"\r\n"
"\r\n"
"GetProfileString() and GetPrivateProfileString() also strip "
"out any leading spaces, and any leading and trailing quotes "
"(single or double quotes). "
"\r\n"
"\r\n"
"Submitted by Michael E. Kropp.\r\n"
"Revised by Kai Riihioja "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
51 RCDATA
begin
"win31wh.hlp\0"
"#51 GetTickCount (2.x)\0"
"GetTickCount\0"
"GetTickCount (2.x)\0"
"WDJ SDK Annotation #51"
"\r\n"
"\r\n"
"GetTickCount() may return units of milliseconds, but its "
"resolution is much worse than one millisecond under Windows "
"3.1. For more accurate timings, call the function "
"timeGetTime(), which is defined in mmsystem.h. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
52 RCDATA
begin
"win31wh.hlp\0"
"#52 GetWinFlags (3.0)\0"
"GetWinFlags\0"
"GetWinFlags (3.0)\0"
"WDJ SDK Annotation #52"
"\r\n"
"\r\n"
"GetWinFlags() can also tell you if your 16-bit Windows 3.1 "
"application is running under Windows NT: "
"\r\n"
"\r\n"
" if(GetWinFlags() & 0x04000)\r\n"
" // then we are running under Windows NT\r\n"
"\r\n"
"Submitted by Paula Tomlinson.\r\n"
"Reference: \042The Ultimate Windows Version Detector\042, "
"Windows/DOS Developer's Journal, February 1995. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
53 RCDATA
begin
"win31wh.hlp\0"
"#53 KillTimer (2.x)\0"
"KillTimer\0"
"KillTimer (2.x)\0"
"WDJ SDK Annotation #53"
"\r\n"
"\r\n"
"Under at least one condition, KillTimer() does not remove a "
"pending WM_TIMER message from the message queue as "
"documented. First, understand that Windows just sets a bit "
"when a timer fires; it does not generate a WM_TIMER message "
"at that time. A timer message is secretly added to your "
"input queue when you call GetMessage() or PeekMessage() and "
"a timer event is pending and no other messages are in the "
"queue. "
"\r\n"
"\r\n"
"If you are using a PeekMessage() call with the PM_NOREMOVE "
"flag and if the timer bit is on at that point, PeekMessage() "
"will place a WM_TIMER message in the queue, but won't remove "
"it. If you then call KillTimer(), it will ensure the timer "
"bit is off but won't remove the WM_TIMER message. The next "
"call to GetMessage() or PeekMessage() returns this WM_TIMER "
"message. One workaround is to use code like this to "
"terminate a timer: "
"\r\n"
"\r\n"
" KillTimer (hWnd, ID);\r\n"
" if (LOWORD (GetQueueStatus (QS_TIMER)) & QS_TIMER)\r\n"
" PeekMessage (&msg, hWnd, WM_TIMER, WM_TIMER, PM_REMOVE);\r\n"
"\r\n"
"Submitted by Mike Mast. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
54 RCDATA
begin
"win31wh.hlp\0"
"#54 DEVMODE (3.0)\0"
"DEVMODE\0"
"DEVMODE (3.0)\0"
"WDJ SDK Annotation #54"
"\r\n"
"\r\n"
"The documentation claims that DMCOLOR_COLOR is defined to be "
"1 and DMCOLOR_MONOCHROME is defined to be 2. In fact, if "
"you look in print.h you discover that the reverse is true. "
"\r\n"
"\r\n"
"Submitted by Bill Liu. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
55 RCDATA
begin
"win31wh.hlp\0"
"#55 EN_CHANGE (2.x)\0"
"EN_CHANGE\0"
"EN_CHANGE (2.x)\0"
"WDJ SDK Annotation #55"
"\r\n"
"\r\n"
"The documentation implies this notification only arises from "
"actions by the user. In fact, this notification also arises "
"from programmatic changes, such as from sending a WM_SETTEXT "
"message to the edit control, or using SetWindowText() (which "
"sends a WM_SETTEXT message). Not knowing this, you might "
"code an EN_CHANGE handler that attempts to modify the edit "
"control text, resulting in another EN_CHANGE notification -- "
"an infinite loop! "
"\r\n"
"\r\n"
"Submitted by Scott Smith. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
56 RCDATA
begin
"win31wh.hlp\0"
"#56 EnumFonts (2.x)\0"
"EnumFonts\0"
"EnumFonts (2.x)\0"
"WDJ SDK Annotation #56"
"\r\n"
"\r\n"
"The 3.1 documentation for this function specifies that the "
"third argument is of type FONTENUMPROC. This was true in "
"previous versions, but in 3.1 this call is deprecated in "
"favour of the new EnumFontFamilies() API function. The "
"definition of the FONTENUMPROC type has been updated to take "
"a NEWTEXTMETRIC parameter, and therefore no longer quite "
"matches the prototype specified for EnumFonts. Microsoft "
"provids a new type, OLDFONTENUMPROC, which corresponds to "
"the STRICT definition of EnumFonts in windows.h, but this is "
"not reflected in the documentation. In other words, if you "
"compile with STRICT defined for Windows 3.1 and want to use "
"EnumFonts(), make sure the third parameter is of type "
"OLDFONTENUMPROC. "
"\r\n"
"\r\n"
"Submitted by David W. Gillett. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
57 RCDATA
begin
"win31wh.hlp\0"
"#57 PtInRect (2.x)\0"
"PtInRect\0"
"PtInRect (2.x)\0"
"WDJ SDK Annotation #57"
"\r\n"
"\r\n"
"There is no mention of this, but the rectangle MUST be "
"normailized before this function is called. In other words, "
"you have to make sure that lprc->right is greater than "
"lprc->left, and that lrpc->bottom is greater than lrpc->top. "
"Otherwise, the point will never be considered inside of the "
"rectangle. By contrast, the function RectInRegion() does "
"accept and correctly handle all rectangles, whether "
"normalized or not. "
"\r\n"
"\r\n"
"Submitted by Peter Ritchie. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
58 RCDATA
begin
"win31wh.hlp\0"
"#58 SetTimer (2.x)\0"
"SetTimer\0"
"SetTimer (2.x)\0"
"WDJ SDK Annotation #58"
"\r\n"
"\r\n"
"The documentation makes it sound like Windows either posts a "
"message (if you supply no callback function) or else calls "
"your callback function directly when the timer expires. In "
"fact, when the timer fires, Windows sets a bit in your "
"message queue which gets transformed into a WM_TIMER message "
"by either GetMessage() or PeekMessage() when they find no "
"other messages in the input queue. The WM_TIMER message "
"contains the address of your callback function (if any), "
"which will be called by DefWindowProc() after the message is "
"dispatched to your window. The key point here is that the "
"timers created by SetTimer() are always message based "
"(Windows does not call your timer procedure asynchronously) "
"and of a lower priority than any other Windows message. "
"\r\n"
"\r\n"
"Submitted by Alan M. Carroll. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
59 RCDATA
begin
"win31wh.hlp\0"
"#59 lstrcpy (2.x)\0"
"lstrcpy\0"
"lstrcpy (2.x)\0"
"WDJ SDK Annotation #59"
"\r\n"
"\r\n"
"Believe it or not, this function (and apparently other "
"similar functions) examine the limit of the selector of the "
"output string, and even attempt to silently recover if the "
"operation causes a GP fault. As a consequence, you should "
"not count on this function being a real speed demon. "
"\r\n"
"\r\n"
"Submitted by Vivek Venugopalan "
"\r\n"
"\r\n"
"\0\0\0\0"
end
60 RCDATA
begin
"win31wh.hlp\0"
"#60 GetModuleFileName (2.x)\0"
"GetModuleFileName\0"
"GetModuleFileName (2.x)\0"
"WDJ SDK Annotation #60"
"\r\n"
"\r\n"
"Windows 3.1 has a bug that causes this function to sometimes "
"return relative paths instead of absolute (fully qualified) "
"paths.This error occurs if a relative path is specified in "
"the PATH variable, and the DLL is implicitly loaded from "
"this directory. For example, if the PATH variable is: "
"\r\n"
"\r\n"
" PATH=C:\\DOS;D:.;C:\\UTILS\r\n"
"\r\n"
"and an application running from any other directory but "
"\042D:.\042, loads a DLL (test.dll) in \042D:.\042 implicitly (since it "
"is in the path), then a call to GetModuleFileName() with the "
"DLL instance will return \042D:.\\test.dll\042. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran "
"Reference: MSKB PSS ID Number: Q85330. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
61 RCDATA
begin
"win31wh.hlp\0"
"#61 CB_GETDROPPEDCONTROLRECT (3.1)\0"
"CB_GETDROPPEDCONTROLRECT\0"
"CB_GETDROPPEDCONTROLRECT (3.1)\0"
"WDJ SDK Annotation #61"
"\r\n"
"\r\n"
"The documentation claims that this function retrieves the "
"screen coordinates of the listbox portion of a combo box. "
"In fact, it retrieves the screen coordinates of the "
"rectangle that encloses the ENTIRE combo box in its "
"dropped-down state. That means the rectangle retrieved is "
"both bit taller and a bit wider than the rectangle that the "
"help file claims is returned. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
62 RCDATA
begin
"win31wh.hlp\0"
"#62 NotifyUnRegister (3.1)\0"
"NotifyUnRegister\0"
"NotifyUnRegister (3.1)\0"
"WDJ SDK Annotation #62"
"\r\n"
"\r\n"
"As the documentation says, you can set the htask argument to "
"NULL to refer to the current task. This is probably not a "
"good practice, however. If more than one application can "
"load your DLL, then there is typically some scenario under "
"which the task that you called NotifyRegister() for has died "
"before you call NotifyUnRegister(), in which case passing "
"NULL would refer to the wrong task. It's probably safer to "
"explicitly store that task that was passed to "
"NotifyRegister() and make sure you pass the same task to "
"NotifyUnregister(). "
"\r\n"
"\r\n"
"Submitted by Paul Dolphin. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
63 RCDATA
begin
"win31wh.hlp\0"
"#63 CreateCompatibleDC (2.x)\0"
"CreateCompatibleDC\0"
"CreateCompatibleDC (2.x)\0"
"WDJ SDK Annotation #63"
"\r\n"
"\r\n"
"You might think from the name that this function returns a "
"device context whose attributes are the same as the source "
"device context. In fact, attributes such as the mapping "
"mode will be set to their defaults (e.g., the mapping mode "
"will always be MM_TEXT) in the returned device context, not "
"to the attribute values of the source device context. "
"\r\n"
"\r\n"
"Submitted by Stuart Patterson\r\n"
"Reference: p. 624, \042Programming Windows 3.1, 3rd Edition\042, "
"by Charles Petzold "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
64 RCDATA
begin
"win31wh.hlp\0"
"#64 Device Contexts\0"
"Device Contexts\0"
"Device Contexts\0"
"WDJ SDK Annotation #64"
"\r\n"
"\r\n"
"The help file says CreateCompatibleDC() creates a device "
"context that \042has the same attributes\042 as the source device "
"context. In fact, the device context's attributes (such as "
"mapping mode) will have their default values, no matter what "
"value they had in the source device context. "
"\r\n"
"\r\n"
"Submitted by Stuart Patterson\r\n"
"Reference: p. 624, \042Programming Windows 3.1, 3rd Edition\042, "
"by Charles Petzold "
"\r\n"
"\r\n"
"\0\0\0\0"
end
65 RCDATA
begin
"win31wh.hlp\0"
"#65 UngetCommChar (2.x)\0"
"UngetCommChar\0"
"UngetCommChar (2.x)\0"
"WDJ SDK Annotation #65"
"\r\n"
"\r\n"
"Do not use this function under Windows 3.1 -- it causes lost "
"characters or even GP faults! "
"\r\n"
"\r\n"
"Submitted by Manfred Keul.\r\n"
"Reference: Microsoft Knowledge Base article Q100183. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
66 RCDATA
begin
"win31wh.hlp\0"
"#66 TabbedTextOut (3.0)\0"
"TabbedTextOut\0"
"TabbedTextOut (3.0)\0"
"WDJ SDK Annotation #66"
"\r\n"
"\r\n"
"If a tab character is the last character in the string, then "
"all of the area to the next tab stop is filled with the "
"current background color. This may or may not be the "
"behavior you want in any given situation. "
"\r\n"
"\r\n"
"Submitted by Tim English. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
67 RCDATA
begin
"win31wh.hlp\0"
"#67 GetRgnBox (3.0)\0"
"GetRgnBox\0"
"GetRgnBox (3.0)\0"
"WDJ SDK Annotation #67"
"\r\n"
"\r\n"
"The documentation claims GetRgnBox() returns COMPLEXREGION "
"when the region has overlapping borders. In fact, "
"GetRgnBox() apparently returns COMPLEXREGION if the region "
"is simply non-rectangular, whether overlapping borders are "
"involved or not. "
"\r\n"
"\r\n"
"Submitted by Jason Douglas. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
68 RCDATA
begin
"win31wh.hlp\0"
"#68 DRAWITEMSTRUCT (3.0)\0"
"DRAWITEMSTRUCT\0"
"DRAWITEMSTRUCT (3.0)\0"
"WDJ SDK Annotation #68"
"\r\n"
"\r\n"
"The itemID field in this structure is set to a negative value "
"for an empty listbox or combobox. Watch out, though -- since "
"this field is defined to be unsigned (UINT), a statement like "
"this: "
"\r\n"
"\r\n"
" if(lpdis->itemID >= 0) // if listbox not empty\r\n"
" // ... some code\r\n"
"\r\n"
"will always evaluate true. To check for an empty listbox or "
"combobox, either cast the field to int or check the high bit: "
"\r\n"
"\r\n"
" if( (int) lpdis->itemID >= 0) // this works correctly\r\n"
" //... some code\r\n"
"\r\n"
"Submitted by Aaron O'Neil. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
69 RCDATA
begin
"win31wh.hlp\0"
"#69 DDEDATA (2.x)\0"
"DDEDATA\0"
"DDEDATA (2.x)\0"
"WDJ SDK Annotation #69"
"\r\n"
"\r\n"
"In this help topic, the description for the fResponse field "
"actually describes the fAckReq field, and vice versa. "
"\r\n"
"\r\n"
"Submitted by Sudhir Menon.\r\n"
"Reference: Microsoft Knowledge Base article Q93372. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
70 RCDATA
begin
"win31wh.hlp\0"
"#70 EnableCommNotification (3.1)\0"
"EnableCommNotification\0"
"EnableCommNotification (3.1)\0"
"WDJ SDK Annotation #70"
"\r\n"
"\r\n"
"Due to bugs in Windows 3.1, you will probably want to always set "
"both cbWriteNotify and cbOutQueue to -1, thus disabling the "
"CN_TRANSMIT and CN_RECEIVE notifications. If you do not set "
"them to -1, spurious WM_COMMNOTIFY messages can be sent, "
"resulting in a system crash at higher baud rates. "
"\r\n"
"\r\n"
"Submitted by Manfred Keul.\r\n"
"Reference: Microsoft Knowledge Base article Q101420. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
71 RCDATA
begin
"win31wh.hlp\0"
"#71 GetMsgProc (3.1)\0"
"GetMsgProc\0"
"GetMsgProc (3.1)\0"
"WDJ SDK Annotation #71"
"\r\n"
"\r\n"
"The help file fails to mention that your hook function gets "
"called by PeekMessage(), not just by GetMessage(). The "
"documentation also contradicts itself, saying first that wParam "
"is undefined and later saying that wParam is NULL. The "
"Microsoft Knowledge Base, on the other hand, reveals that wParam "
"contains the PM_ flags that were used in the call to "
"PeekMessage(), so your message hook can, for example, determine "
"if the message was being removed or not with code like this: "
"\r\n"
"\r\n"
" if(wParam & PM_REMOVE)\r\n"
" //... then message is being removed\r\n"
" else\r\n"
" //... message is not being removed\r\n"
"\r\n"
"Note that your hook may want to ignore the message if it is not "
"being removed, since your hook will get called again when the "
"same message is removed by some future call to GetMessage() or "
"PeekMessage(). "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran.\r\n"
"Reference: Microsoft Knowledge Base article Q104068 "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
72 RCDATA
begin
"win31wh.hlp\0"
"#72 GetInstanceData (2.x)\0"
"GetInstanceData\0"
"GetInstanceData (2.x)\0"
"WDJ SDK Annotation #72"
"\r\n"
"\r\n"
"Both the documentation and windows.h declare the second "
"parameter as a BYTE*. Unfortunately, that declaration is only "
"correct if you are using a memory model with near data (small or "
"medium memory models), and will be incorrect for large or huge "
"memory models. The correct declaration for this argument is "
"BYTE NEAR*. "
"\r\n"
"\r\n"
"Submitted by Martin Cooper. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
73 RCDATA
begin
"win31wh.hlp\0"
"#73 MENUITEMTEMPLATE (3.0)\0"
"MENUITEMTEMPLATE\0"
"MENUITEMTEMPLATE (3.0)\0"
"WDJ SDK Annotation #73"
"\r\n"
"\r\n"
"Missing from the list of bits you can turn on in mtOption is "
"MF_END (0x0080), which indicates that the item terminates "
"the menu. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
74 RCDATA
begin
"win31wh.hlp\0"
"#74 AddAtom (2.x)\0"
"AddAtom\0"
"AddAtom (2.x)\0"
"WDJ SDK Annotation #74"
"\r\n"
"\r\n"
"AddAtom() handles strings that begin with \042#\042 specially: "
"it expects the string following the \042#\042 to be a string "
"of digits, and returns an atom is value is the 16-bit "
"binary representation of that string of digits. Unfortunately, "
"if your first call to AddAtom() is with a string like \042#nondigits\042, "
"it will produce a divide by zero fault. Two workarounds "
"are possible: either make sure your first call to AddAtom() "
"does not contain such a string, or call InitAtomTable() "
"before calling AddAtom() for the first time. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran.\r\n"
"Reference: MSKB PSS ID Number: Q103036 "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
75 RCDATA
begin
"win31wh.hlp\0"
"#75 DCB (2.x)\0"
"DCB\0"
"DCB (2.x)\0"
"WDJ SDK Annotation #75"
"\r\n"
"\r\n"
"When setting the BaudRate field, do not use the constant "
"CBR_14400; Windows 3.1's COMM.DRV has a bug that will produce "
"communications problems due to a bad table entry for that "
"constant. Instead, set BaudRate to the integer 14400 to "
"communicate at 14400 baud. "
"\r\n"
"\r\n"
"Submitted by Manfred Keul.\r\n"
"Reference: Microsoft Knowledge Base article Q83232. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
76 RCDATA
begin
"win31wh.hlp\0"
"#76 RegisterRoutine WinHelp macro\0"
"RegisterRoutine WinHelp macro\0"
"RegisterRoutine WinHelp macro\0"
"WDJ SDK Annotation #76"
"\r\n"
"\r\n"
"The documentation does not reveal how to specify the return type "
"of the function. You do this by inserting a type-specifying "
"character followed by an equal sign in the third parameter "
"string. For example, to register FindWindow() (which takes "
"two far strings and returns a 16-bit unsigned integer), you "
"might use: "
"\r\n"
"\r\n"
" RR(\042USER\042, \042FindWindow\042, \042u=SS\042);\r\n"
"\r\n"
"Note that if you do not specify a return type when you register "
"a function, you cannot use that function in an IfThen or "
"IfThenElse macro. "
"\r\n"
"\r\n"
"Submitted by Sudhir Menon. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
77 RCDATA
begin
"win31wh.hlp\0"
"#77 RTF Tokens\0"
"RTF Tokens\0"
"RTF Tokens\0"
"WDJ SDK Annotation #77"
"\r\n"
"\r\n"
"Strangely, the tokens \042emc\042, \042eml\042, and \042emr\042 are "
"misspelled in the online help -- they should be "
"\042ewc\042, \042ewl\042, and \042ewr\042, where the \042ew\042 stands for "
"Embedded Window. Note that this are not really RTF "
"tokens, but literal text. The help compiler scans "
"for any text you have entered of the form \042{ewx commands}\042 "
"in order to detect embedded window commands. Such text, "
"when translated by your word processor into RTF, looks "
"like this: \042\\{ewx commands\\}\042. "
"\r\n"
"\r\n"
"Submitted by John Sawyer. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
78 RCDATA
begin
"win31wh.hlp\0"
"#78 WM_ENTERIDLE (2.x)\0"
"WM_ENTERIDLE\0"
"WM_ENTERIDLE (2.x)\0"
"WDJ SDK Annotation #78"
"\r\n"
"\r\n"
"Note that you can elect to suppress the WM_ENTERIDLE "
"message for a particular modal dialog box by defining "
"it with the DS_NOIDLEMSG window style bit. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
79 RCDATA
begin
"win31wh.hlp\0"
"#79 WM_SYSCOMMAND (2.x)\0"
"WM_SYSCOMMAND\0"
"WM_SYSCOMMAND (2.x)\0"
"WDJ SDK Annotation #79"
"\r\n"
"\r\n"
"You can use this message with SC_MENUKEY to simulate the "
"user selecting a menu with an accelerator key. For example, "
"to simulate the user accessing the \042File\042 menu, you might "
"use the following code: "
"\r\n"
"\r\n"
"PostMessage(hWnd, WM_SYSCOMMAND, SC_MENUKEY, MAKELPARAM('f',0)); "
"\r\n"
"\r\n"
"Submitted by Jay Giganti. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
80 RCDATA
begin
"win31wh.hlp\0"
"#80 wsprintf\0"
"wsprintf\0"
"wsprintf\0"
"WDJ SDK Annotation #80"
"\r\n"
"\r\n"
"The documentation says the second parameter is an LPSTR, "
"but it is actually an LPCSTR (and so declared in windows.h), "
"so it's safe to use a string constant. "
"\r\n"
"\r\n"
"Submitted by: V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
81 RCDATA
begin
"win31wh.hlp\0"
"#81 _lread (2.x)\0"
"_lread\0"
"_lread (2.x)\0"
"WDJ SDK Annotation #81"
"\r\n"
"\r\n"
"If you call _lread() to read a floppy when there is no "
"diskette in the drive, Windows puts up a system error "
"message box (\042Cannot Read from Drive...\042) with Retry and "
"Cancel buttons. If the user presses the Cancel button, "
"_lread() returns a non-negative number, indicating success. "
"It should return HFILE_ERROR instead. "
"\r\n"
"\r\n"
"To avoid this error, call SetErrorMode(SEM_NOOPENFILEERRORBOX) "
"before calling _lread(), then it will correctly return -1 on "
"failure. "
"\r\n"
"\r\n"
"Submitted by: V. Ramachandran.\r\n"
"Reference: MSDN PSS ID No. Q111587. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
82 RCDATA
begin
"win31wh.hlp\0"
"#82 WM_COMPAREITEM (3.0)\0"
"WM_COMPAREITEM\0"
"WM_COMPAREITEM (3.0)\0"
"WDJ SDK Annotation #82"
"\r\n"
"\r\n"
"The documentation for WM_COMPAREITEM says that the parent of "
"owner-drawn listboxes with the LBS_SORT (or CBS_SORT) styles "
"will get this message in order to determine the relative "
"position. However, Windows will not send the WM_COMPAREITEM "
"message if the LBS_HASSTRINGS style bit is set, even if it "
"is an owner-drawn listbox with the LBS_SORT style. The same "
"is true for comboboxes. "
"\r\n"
"\r\n"
"Submitted by: V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
83 RCDATA
begin
"win31wh.hlp\0"
"#83 DOCINFO (3.1)\0"
"DOCINFO\0"
"DOCINFO (3.1)\0"
"WDJ SDK Annotation #83"
"\r\n"
"\r\n"
"The documentation fails to point out that lpszOutput is "
"limited to 32 characters, including the null terminating "
"byte. If you use a string longer than that, the trailing "
"characters will be ignored. For example, if you use a "
"string containing the too-long path: "
"\r\n"
"\r\n"
" c:\\usr\\ts\\issues\\pending\\12345678\\abcdefgh.out\r\n"
"\r\n"
"the actual file that gets created will be: "
"\r\n"
"\r\n"
" c:\\usr\\ts\\issues\\pending\\123456\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
84 RCDATA
begin
"win31wh.hlp\0"
"#84 SetAbortProc function\0"
"SetAbortProc\0"
"SetAbortProc function\0"
"WDJ SDK Annotation #84"
"\r\n"
"\r\n"
"\r\n"
"SetAbortProc() returns a negative value, which is documented "
"as indicating failure. However, the return value from "
"SetAbortProc does not indicate success or failure of the "
"function, so don't depend on the return value for anything. "
"\r\n"
"\r\n"
"Submitted by: V. Ramachandran.\r\n"
"Reference: MSDN PSS ID No. Q109540. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
85 RCDATA
begin
"win31wh.hlp\0"
"#85 BN_DISABLE (2.x)\0"
"BN_DISABLE\0"
"BN_DISABLE (2.x)\0"
"WDJ SDK Annotation #85"
"\r\n"
"\r\n"
"The documentation claims the button sends this notification "
"whenever it gets disabled. In fact, Windows 3.1 buttons do "
"not appear to ever send this notification! "
"\r\n"
"\r\n"
"Submitted by: V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
86 RCDATA
begin
"win31wh.hlp\0"
"#86 BN_DOUBLECLICKED (2.x)\0"
"BN_DOUBLECLICKED\0"
"BN_DOUBLECLICKED (2.x)\0"
"WDJ SDK Annotation #86"
"\r\n"
"\r\n"
"The documentation fails to point out that this notification "
"is only sent for buttons that have the BS_OWNERDRAW or "
"BS_RADIOBUTTON styles. No other types of buttons generate "
"this notification "
"\r\n"
"\r\n"
"Submitted by: V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
87 RCDATA
begin
"win31wh.hlp\0"
"#87 WM_DROPFILES (3.1)\0"
"WM_DROPFILES\0"
"WM_DROPFILES (3.1)\0"
"WDJ SDK Annotation #87"
"\r\n"
"\r\n"
"Documentation for the undocumented handle has since been "
"published by Microsoft in Microsoft Systems Journal. This "
"handle points to a structure like this: "
"\r\n"
"\r\n"
"typedef struct {\r\n"
" int wSize; // Number of bytes in this structure\r\n"
" POINT ptMousePos; // Mouse position\r\n"
" BOOL fInNonClientArea;// TRUE if mouse was in client area\r\n"
" // Pathnames begin after structure each one zero-terminated\r\n"
" // Zero-length pathname used to indicate the end\r\n"
"} DROPFILESTRUCT, FAR *LPDROPFILESTRUCT;\r\n"
"\r\n"
"The Win32 version of this structure is slightly different. The "
"first field becomes a 4-byte rather than a 2-byte integer, and "
"the structure contains an additional BOOL field at the end that "
"is TRUE if the pathnames are in Unicode rather than ANSI "
"strings. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran.\r\n"
"Reference: May/June 1992 Microsoft Systems Journal\r\n"
" February 1994 Microsoft Systems Journal\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
88 RCDATA
begin
"win32.hlp\0"
"#87 WM_DROPFILES\0"
"WM_DROPFILES AND Parameters\0"
"WM_DROPFILES\0"
"WDJ SDK Annotation #87"
"\r\n"
"\r\n"
"Documentation for the undocumented handle has since been "
"published by Microsoft in Microsoft Systems Journal. This "
"handle points to a structure like this: "
"\r\n"
"\r\n"
"typedef struct {\r\n"
" int wSize; // Number of bytes in this structure\r\n"
" POINT ptMousePos; // Mouse position\r\n"
" BOOL fInNonClientArea;// TRUE if mouse was in client area\r\n"
" // Pathnames begin after structure each one zero-terminated\r\n"
" // Zero-length pathname used to indicate the end\r\n"
"} DROPFILESTRUCT, FAR *LPDROPFILESTRUCT;\r\n"
"\r\n"
"The Win32 version of this structure is slightly different. The "
"first field becomes a 4-byte rather than a 2-byte integer, and "
"the structure contains an additional BOOL field at the end that "
"is TRUE if the pathnames are in Unicode rather than ANSI "
"strings. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran.\r\n"
"Reference: May/June 1992 Microsoft Systems Journal\r\n"
" February 1994 Microsoft Systems Journal\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
89 RCDATA
begin
"win31wh.hlp\0"
"#88 List box messages \0"
"List box messages \0"
"List box messages \0"
"WDJ SDK Annotation #88"
"\r\n"
"\r\n"
"Internally, listboxes maintain two 32-bit DWORDs for each "
"listbox item. The first DWORD points to the text for the item "
"and the second DWORD contains whatever custom data you would "
"like; you can get it via LB_GETITEMDATA or set it via "
"LB_SETITEMDATA. Some messages refer to one or the other of "
"these DWORDs, depending on whether the LBS_HASSTRINGS style is "
"set: "
"\r\n"
"\r\n"
"Message LBS_HASSTRINGS? Refers to:\r\n"
"==========================================================\r\n"
"LB_ADDSTRING Yes text pointer (lParam)\r\n"
"LB_ADDSTRING No custom data (lParam)\r\n"
"LB_INSERTSTRING Yes text pointer (lParam)\r\n"
"LB_INSERTSTRING No custom data (lParam)\r\n"
"LB_GETTEXT Yes returns text pointer\r\n"
"LB_GETTEXT No returns custom data\r\n"
"LB_GETITEMDATA either returns custom data\r\n"
"LB_SETITEMDATA either sets custom data (lParam)\r\n"
"WM_DRAWITEM either custom data (in itemData field)\r\n"
"\r\n"
"In other words, if LBS_HASSTRINGS is not set, you cannot access "
"the normal text pointer -- all messages operate on the custom "
"data. But if LBS_HASSTRINGS is set, you can access both the "
"normal text as well as the extra DWORD of custom data. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
90 RCDATA
begin
"win31wh.hlp\0"
"#89 SetTimer (2.x)\0"
"SetTimer\0"
"SetTimer (2.x)\0"
"WDJ SDK Annotation #89"
"\r\n"
"\r\n"
"Though the documentation does not mention this, you can "
"change the timer interval after you create the timer. If "
"you call SetTimer() with a window handle and a timer ID "
"equal to an existing timer and specify a different time "
"interval, SetTimer() updates the timer to the new time "
"interval. "
"\r\n"
"\r\n"
"Example: "
"\r\n"
"\r\n"
"Use the following line to set a timer to a particular time "
"interval. "
"\r\n"
"\r\n"
"UINT nTimerID = SetTimer (hWnd, TIMER_ID, TIME_INTERVAL, NULL) "
"\r\n"
"\r\n"
"Calling the following line will reset the timer to twice the "
"time interval. "
"\r\n"
"\r\n"
"nTimerID = SetTimer (hWnd, TIMER_ID, 2*TIME_INTERVAL, NULL) "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
91 RCDATA
begin
"win31wh.hlp\0"
"#90 TranslateAccelerator (2.x)\0"
"TranslateAccelerator\0"
"TranslateAccelerator (2.x)\0"
"WDJ SDK Annotation #90"
"\r\n"
"\r\n"
"Contrary to the documentation, both WM_INITMENU and "
"WM_INITMENUPOPUP get sent, even if the menu item is disabled, "
"and even if the window is minimized and the keystroke matches no "
"menu items. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
92 RCDATA
begin
"win31wh.hlp\0"
"#91 GetPrivateProfileInt (3.0)\0"
"GetPrivateProfileInt\0"
"GetPrivateProfileInt (3.0)\0"
"WDJ SDK Annotation #91"
"\r\n"
"\r\n"
"The documentation says you must use a positive integer "
"in the range 0 through 32,767 (0x7FFF) for the third "
"argument, which is the default value the function returns "
"if it cannot locate the desired entry in the .ini file. "
"In fact, you can pass any legal integer value for this "
"parameter -- it's just that since the function's return "
"type is defined to be UINT, you must cast the result to "
"int if you want to treat the result as a negative number. "
"For example, the following code works correctly, despite "
"what the documentation says: "
"\r\n"
"\r\n"
" int Val = (int)GetPrivateProfileInt(\r\n"
" \042MyLib\042, \042Debug\042, -1, \042MyLib.ini\042);\r\n"
" if(Val == -1)\r\n"
" /* then no such entry found */\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
93 RCDATA
begin
"win32.hlp\0"
"#92 WM_NOTIFY\0"
"WM_NOTIFY AND \042See also\042\0"
"WM_NOTIFY\0"
"WDJ SDK Annotation #92"
"\r\n"
"\r\n"
"If your dialog procedure handles a WM_NOTIFY that requires a "
"return value, note that you MUST both return a non-zero "
"value (to indicate to the dialog manager that you wish to "
"specify a return value for the message) AND store the "
"desired return value for the message in the window field "
"DWL_MSGRESULT. The standard Windows header file windowsx.h "
"provides a macro called SetDlgMsgResult() that makes this "
"easy: "
"\r\n"
"\r\n"
" #include <windowsx.h>\r\n"
" //...\r\n"
" case WM_NOTIFY :\r\n"
" {\r\n"
" NMHDR* Head = (NMHDR*)lParam;\r\n"
" if(Head->code == LVN_ENDLABELEDIT)\r\n"
" // allow user to edit listview labels\r\n"
" return SetDlgMsgResult(Dialog, WM_NOTIFY, TRUE);\r\n"
" }\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
94 RCDATA
begin
"win32.hlp\0"
"#92 LVN_ENDLABELEDIT\0"
"LVN_ENDLABELEDIT AND Parameters\0"
"LVN_ENDLABELEDIT\0"
"WDJ SDK Annotation #92"
"\r\n"
"\r\n"
"If your dialog procedure handles a WM_NOTIFY that requires a "
"return value (as this one does), note that you MUST both "
"return a non-zero value (to indicate to the dialog manager "
"that you wish to specify a return value for the message) AND "
"store the desired return value for the message in the window "
"field DWL_MSGRESULT. The standard Windows header file "
"windowsx.h provides a macro called SetDlgMsgResult() that "
"makes this easy: "
"\r\n"
"\r\n"
" #include <windowsx.h>\r\n"
" //...\r\n"
" case WM_NOTIFY :\r\n"
" {\r\n"
" NMHDR* Head = (NMHDR*)lParam;\r\n"
" if(Head->code == LVN_ENDLABELEDIT)\r\n"
" // allow user to edit listview labels\r\n"
" return SetDlgMsgResult(Dialog, WM_NOTIFY, TRUE);\r\n"
" }\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
95 RCDATA
begin
"win32.hlp\0"
"#92 LVN_BEGINLABELEDIT\0"
"LVN_BEGINLABELEDIT AND Parameters\0"
"LVN_BEGINLABELEDIT\0"
"WDJ SDK Annotation #92"
"\r\n"
"\r\n"
"If your dialog procedure handles a WM_NOTIFY that requires a "
"return value (as this one does), note that you MUST both "
"return a non-zero value (to indicate to the dialog manager "
"that you wish to specify a return value for the message) AND "
"store the desired return value for the message in the window "
"field DWL_MSGRESULT. The standard Windows header file "
"windowsx.h provides a macro called SetDlgMsgResult() that "
"makes this easy: "
"\r\n"
"\r\n"
" #include <windowsx.h>\r\n"
" //...\r\n"
" case WM_NOTIFY :\r\n"
" {\r\n"
" NMHDR* Head = (NMHDR*)lParam;\r\n"
" if(Head->code == LVN_BEGINLABELEDIT)\r\n"
" // allow user to edit listview labels\r\n"
" return SetDlgMsgResult(Dialog, WM_NOTIFY, FALSE);\r\n"
" }\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
96 RCDATA
begin
"win31wh.hlp\0"
"#93 GetWindowText\0"
"GetWindowText \0"
"GetWindowText\0"
"WDJ SDK Annotation #93"
"\r\n"
"\r\n"
"GetWindowText() and GetDlgItemText() will not work when "
"applied to a standard edit control that belongs to another "
"application. The problem is that GetWindowText() and "
"GetDlgItemText() attempt to optimize by directly examining "
"the window caption of the target window. An edit control "
"stores an empty string in its caption, not the edit control "
"text, so this fails. You can avoid this bug by sending a "
"WM_GETTEXT explicitly: "
"\r\n"
"\r\n"
" HWND OtherEdit;\r\n"
" char Buffer[256];\r\n"
" SendMessage(OtherEdit, WM_GETTEXT,\r\n"
" sizeof(Buffer), (LPARAM)Buffer);\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
97 RCDATA
begin
"win31wh.hlp\0"
"#93 GetDlgItemText\0"
"GetDlgItemText \0"
"GetDlgItemText\0"
"WDJ SDK Annotation #93"
"\r\n"
"\r\n"
"GetWindowText() and GetDlgItemText() will not work when "
"applied to a standard edit control that belongs to another "
"application. The problem is that GetWindowText() and "
"GetDlgItemText() attempt to optimize by directly examining "
"the window caption of the target window. An edit control "
"stores an empty string in its caption, not the edit control "
"text, so this fails. You can avoid this bug by sending a "
"WM_GETTEXT explicitly: "
"\r\n"
"\r\n"
" HWND OtherEdit;\r\n"
" char Buffer[256];\r\n"
" SendMessage(OtherEdit, WM_GETTEXT,\r\n"
" sizeof(Buffer), (LPARAM)Buffer);\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
98 RCDATA
begin
"win32.hlp\0"
"#94 LVM_GETCOLUMNWIDTH\0"
"LVM_GETCOLUMNWIDTH AND Parameters\0"
"LVM_GETCOLUMNWIDTH\0"
"WDJ SDK Annotation #94"
"\r\n"
"\r\n"
"The documentation claims that this message returns the "
"column width if successful, \042or zero otherwise\042. In fact, "
"if you specify an invalid column number, this function "
"returns garbage. Therefore, you cannot use this message to "
"count the number of columns in a listview control. The "
"associated message, LVM_GETCOLUMN, does correctly return "
"zero when passed an invalid column number, so you can use "
"LVM_GETCOLUMN to determine the number of columns in a "
"listview control. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
99 RCDATA
begin
"win31wh.hlp\0"
"#95 SystemParametersInfo (3.1)\0"
"SystemParametersInfo \0"
"SystemParametersInfo (3.1)\0"
"WDJ SDK Annotation #95"
"\r\n"
"\r\n"
"The documentation says that the screen saver time out "
"(SPI_GETSCREENSAVETIMEOUT) is specified in milliseconds. In "
"fact, the value returned is in seconds. "
"\r\n"
"\r\n"
"Submitted by: Carlton Guc "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
100 RCDATA
begin
"win32.hlp\0"
"#96 LVN_ENDLABELEDIT\0"
"LVN_ENDLABELEDIT AND Parameters\0"
"LVN_ENDLABELEDIT\0"
"WDJ SDK Annotation #96"
"\r\n"
"\r\n"
"The documentation claims that there is no return value for "
"this message. In fact, you should return FALSE if you want "
"to reject the user's editing, or TRUE if you want to allow "
"the changes to the listview item. If you are handling this "
"notification inside a dialog procedure, remember that you "
"must return a non-zero result AND store the message result "
"(either TRUE or FALSE) in DWL_MSGRESULT, using either "
"SetWindowLong() or the SetDlgMsgResult() macro (defined in "
"windowsx.h). "
"\r\n"
"\r\n"
"Submitted by: Poul A. Costinsky "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
101 RCDATA
begin
"win32.hlp\0"
"#98 RegSetValueEx\0"
"RegSetValueEx AND \042See also\042\0"
"RegSetValueEx\0"
"WDJ SDK Annotation #98"
"\r\n"
"\r\n"
"For string-based data types, such as REG_SZ, this function "
"behaves differently under Win95 and NT. Under Win95, if you "
"pass a value of \042abcd\042 and a length of 4, the function will "
"actually append a null byte, and if you retrieve the value "
"later, you will find it has a length of 5. Under NT, this "
"function stores exactly what you tell it to store. "
"\r\n"
"\r\n"
"Submitted by Paula Tomlinson. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
102 RCDATA
begin
"win32.hlp\0"
"#97 LVN_ITEMCHANGING\0"
"LVN_ITEMCHANGING AND Parameters\0"
"LVN_ITEMCHANGING\0"
"WDJ SDK Annotation #97"
"\r\n"
"\r\n"
"The documentation incorrectly claims that you have to return "
"TRUE to allow the change, or FALSE to prevent it. In fact, "
"you have to return FALSE to allow the change or TRUE to "
"prevent it. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
103 RCDATA
begin
"win32.hlp\0"
"#99 LV_DISPINFO\0"
"LV_DISPINFO AND Parameters\0"
"LV_DISPINFO\0"
"WDJ SDK Annotation #99"
"\r\n"
"\r\n"
"The documentation says you can set the LVIF_DI_SETITEM flag "
"in the mask member to have Windows store the string and not "
"ask for it again. It fails to point out that this only "
"works for subitem 0 (the first column), so you would still "
"have to handle requests for the text of the other columns. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
104 RCDATA
begin
"win32.hlp\0"
"#100 LVM_EDITLABEL\0"
"LVM_EDITLABEL AND Parameters\0"
"LVM_EDITLABEL\0"
"WDJ SDK Annotation #100"
"\r\n"
"\r\n"
"Note that the listview control implements in-place editing "
"by creating an edit control on the fly. Unfortunately, it "
"assigns that edit control a child ID of IDOK, which means "
"that the parent of the listview control will receive edit "
"control notifications that it might not expect. For "
"example, if your listview control is in a dialog box, and "
"your dialog procedure contains code like this: "
"\r\n"
"\r\n"
" // inside WM_COMMAND handler...\r\n"
" if(ControlId == IDOK)\r\n"
" EndDialog(Dialog, TRUE);\r\n"
"\r\n"
"Then it may terminate the dialog when the user starts "
"editing a listview item (since the transient edit control "
"will send notifications like EN_CHANGE, with a control ID of "
"IDOK). The above code should read: "
"\r\n"
"\r\n"
" // inside WM_COMMAND handler...\r\n"
" if(ControlId == IDOK && NotifyCode == BN_CLICKED)\r\n"
" EndDialog(Dialog, TRUE);\r\n"
"\r\n"
"to be safe. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
105 RCDATA
begin
"win31wh.hlp\0"
"#101 GetWindowTextLength (2.x)\0"
"GetWindowTextLength\0"
"GetWindowTextLength (2.x)\0"
"WDJ SDK Annotation #101"
"\r\n"
"\r\n"
"Due to a bug in Windows 3.1, both GetWindowTextLength() and "
"WM_GETTEXTLENGTH return -1 if you use it on a combobox of "
"style CBS_DROPDOWNLIST. "
"\r\n"
"\r\n"
"Submitted by Mircea Neacsu "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
106 RCDATA
begin
"win32.hlp\0"
"#102 LB_ADDSTRING\0"
"LB_ADDSTRING AND Parameters\0"
"LB_ADDSTRING\0"
"WDJ SDK Annotation #102"
"\r\n"
"\r\n"
"If you are planning to add a large number (more than 100) of "
"strings by calling LB_ADDSTRING, LB_INSERTSTRING, LB_DIR, or "
"LB_ADDFILE, consider first sending the new Win32 message "
"LB_INITSTORAGE to give the listbox a chance to preallocate "
"memory, thus speeding up the process. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
107 RCDATA
begin
"win32.hlp\0"
"#102 LB_ADDSTRING\0"
"LB_ADDSTRING AND Parameters\0"
"LB_ADDSTRING\0"
"WDJ SDK Annotation #102"
"\r\n"
"\r\n"
"If you are planning to add a large number (more than 100) of "
"strings by calling LB_ADDSTRING, LB_INSERTSTRING, LB_DIR, or "
"LB_ADDFILE, consider first sending the new Win32 message "
"LB_INITSTORAGE to give the listbox a chance to preallocate "
"memory, thus speeding up the process. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
108 RCDATA
begin
"win32.hlp\0"
"#103 LoadString\0"
"LoadString AND \042See also\042\0"
"LoadString\0"
"WDJ SDK Annotation #103"
"\r\n"
"\r\n"
"Even though resource strings are stored as Unicode for both "
"Win95 and NT programs, Win95 does not provide an "
"implementation of the Unicode version of LoadString() "
"(LoadStringW()). This usually trips up NT programmers who "
"want to create a single .exe for both operating systems and "
"yet still use Unicode under NT. In that case, you must at "
"runtime detect that you are running under Win95 and, in that "
"case, explicitly call LoadStringA(). Otherwise, if you have "
"compiled with _UNICODE defined, LoadString() will expand "
"into LoadStringW(), which is just a stub that fails under "
"Win95. "
"\r\n"
"\r\n"
"Submitted by Paula Tomlinson. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
109 RCDATA
begin
"win32.hlp\0"
"#104 LVN_DELETEITEM\0"
"LVN_DELETEITEM AND Parameters\0"
"LVN_DELETEITEM\0"
"WDJ SDK Annotation #104"
"\r\n"
"\r\n"
"The documentation implies that this notification "
"arrives after the item is deleted. In fact, it "
"arrives before the item is deleted from the listview "
"control. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
110 RCDATA
begin
"win32.hlp\0"
"#105 IsWindow\0"
"IsWindow AND Parameters\0"
"IsWindow\0"
"WDJ SDK Annotation #105"
"\r\n"
"\r\n"
"The documentation claims this function returns TRUE if the "
"given handle is a valid window handle. That was true under "
"Windows 3.x and is true under Windows NT, but Windows 95 "
"returns a large non-zero value that is not equal to 1 (nor "
"is it equal to the window handle). In an un-indexed help "
"topic in the initial Win95 SDK, Microsoft reveals that "
"Win95 functions with BOOL return types are only guaranteed "
"to return non-zero when the documentation claims they "
"return TRUE. Windows NT appears to behave as documented. "
"\r\n"
"\r\n"
"Submitted by: David Lowndes "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
111 RCDATA
begin
"win32.hlp\0"
"#105 GetClientRect\0"
"GetClientRect AND \042See also\042\0"
"GetClientRect\0"
"WDJ SDK Annotation #105"
"\r\n"
"\r\n"
"The documentation claims this function returns TRUE if the "
"given handle is a valid window handle. That was true under "
"Windows 3.x and is true under Windows NT, but Windows 95 "
"returns a large non-zero value that is not equal to 1 (nor "
"is it equal to the window handle). In an un-indexed help "
"topic in the initial Win95 SDK, Microsoft reveals that "
"Win95 functions with BOOL return types are only guaranteed "
"to return non-zero when the documentation claims they "
"return TRUE. Windows NT appears to behave as documented. "
"\r\n"
"\r\n"
"Submitted by: Ron Scott "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
112 RCDATA
begin
"win32.hlp\0"
"#106 WM_GETDLGCODE\0"
"WM_GETDLGCODE AND Parameters\0"
"WM_GETDLGCODE\0"
"WDJ SDK Annotation #106"
"\r\n"
"\r\n"
"The documentation WM_GETDLGCODE states that this message has "
"no parameters. But the truth is that if the user presses a "
"key, lParam will contain a pointer to a MSG structure "
"containing information about the event that made Windows send "
"the WM_GETDLGCODE message. This is indirectly documented in "
"windowsx.h, where the HANDLE_WM_GETDLGCODE() macro passes "
"two arguments to the handler: the window handle and (MSG "
"FAR*)(lParam). "
"\r\n"
"\r\n"
"Submitted by: Patrick Tennberg "
"Reference: Microsoft Knowledge Base article Q83302 "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
113 RCDATA
begin
"win32.hlp\0"
"#107 DBT_DEVICEQUERYREMOVE\0"
"DBT_DEVICEQUERYREMOVE AND Parameters\0"
"DBT_DEVICEQUERYREMOVE\0"
"WDJ SDK Annotation #107"
"\r\n"
"\r\n"
"The documentation incorrectly says that you should return "
"FALSE if you want to veto the device removal. In fact, you "
"have to return BROADCAST_QUERY_DENY; returning FALSE will "
"allow the device removal to proceed. "
"\r\n"
"\r\n"
"Submitted by Paula Tomlinson. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
114 RCDATA
begin
"win31wh.hlp\0"
"#108 LZOpenFile\0"
"LZOpenFile \0"
"LZOpenFile\0"
"WDJ SDK Annotation #108"
"\r\n"
"\r\n"
"\r\n"
"However, if lpszFile contains only a filename and extension "
"(i.e. no path is specified), then LZOpenFile() use the same "
"searching logic as OpenFile(). If no file with the matching "
"name (and extension) is found, then it searches for the "
"compressed filename. The compressed file has a _ as the "
"last character (e.g., the compressed version of \042readme.txt\042 "
"is \042readme.tx_\042). Therefore if you use LZOpenFile() to open "
"a file called \042readme.txt\042, it searches as follows: "
"\r\n"
"\r\n"
" 1) it looks for \042readme.txt\042 using the same search\r\n"
" algorithm as OpenFile().\r\n"
" 2) if the file was not found, it uses the same\r\n"
" algorithm to search for \042readme.tx_\042.\r\n"
"\r\n"
"That means LZOpenFile() might open a \042readme.tx_\042 file from "
"a directory other than the one you expected. Even if you "
"specify the complete filename (such as "
"\042c:\\demo\\readme.txt\042), LZOpenFile() first searches for the "
"specified file, and if the specified filename is not found, "
"it searches for the compressed file in the same directory "
"(\042c:\\demo\\readme.tx_\042). "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
115 RCDATA
begin
"win32.hlp\0"
"#109 SetCapture\0"
"SetCapture AND Parameters\0"
"SetCapture\0"
"WDJ SDK Annotation #109"
"\r\n"
"\r\n"
"This help topic does not document the fact that when the "
"mouse is captured, menu hotkeys (for example, Alt+F for "
"accessing the File menu) and other keyboard accelerators do "
"not work (ex: Alt+F4). This is because DefWindowProc() "
"handles the WM_SYSCHAR and WM_SYSCOMMAND messages "
"differently if the mouse has been captured (by any window). "
"\r\n"
"\r\n"
"DefWindowProc() processes the WM_SYSCHAR message to check if "
"the pressed key is a menu hotkey (Alt+F for example). If it "
"is, then it causes the menu to drop down. However, if the "
"mouse is captured, it does not do the above action. "
"Whenever DefWindowProc() sees a WM_SYSCOMMAND and finds that "
"the mouse is captured, then it does nothing. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
116 RCDATA
begin
"win32.hlp\0"
"#110 RegCreateKey\0"
"RegCreateKey AND \042See also\042\0"
"RegCreateKey\0"
"WDJ SDK Annotation #110"
"\r\n"
"\r\n"
"The documentation for RegCreateKey(), RegCreateKeyEx(), "
"RegOpenKey(), and RegOpenKeyEx() all list several predefined "
"handles you can use, such as HKEY_CURRENT_USER. However, "
"they fail to document the predefined key "
"HKEY_CURRENT_CONFIG, which has a structure similar to the "
"registry tree under HKEY_LOCAL_MACHINE, but is for storing "
"information specific to the current hardware profile. "
"\r\n"
"\r\n"
"Submitted by Paula Tomlinson. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
117 RCDATA
begin
"win32.hlp\0"
"#111 CreateFile\0"
"CreateFile AND \042See also\042\0"
"CreateFile\0"
"WDJ SDK Annotation #111"
"\r\n"
"\r\n"
"The documentation claims CreateFile() returns a handle that "
"can be used to access the object. However, under both NT "
"and Win95, CreateFile() will appear to succeed and return a "
"valid handle if you attempt to open a file with "
"GENERIC_WRITE permissions on a read-only medium (e.g., "
"protected floppy or CD-ROM). If you then try to perform a "
"write with the returned handle, that will fail. "
"\r\n"
"\r\n"
"\r\n"
"Submitted by: David Lowndes "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
118 RCDATA
begin
"win32.hlp\0"
"#112 GetWindowText\0"
"GetWindowText AND \042See Also\042\0"
"GetWindowText\0"
"WDJ SDK Annotation #112"
"\r\n"
"\r\n"
"The third argument is the \042maximum numbers of characters to "
"copy\042. It may not be clear that this number must include "
"the NULL byte so, for example, it never makes sense to set "
"this argument to 1 since all you could get back is a NULL "
"byte. If you want to use GetWindowText() to retrieve a "
"single character (e.g., from an edit control), you would "
"have to specify a length of 2 -- one for the character and "
"one for the terminating NULL byte. "
"\r\n"
"\r\n"
"Submitted by: Tony Yuricich "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
119 RCDATA
begin
"win32.hlp\0"
"#113 keybd_event\0"
"keybd_event AND \042See also\042\0"
"keybd_event\0"
"WDJ SDK Annotation #113"
"\r\n"
"\r\n"
"You can use this function to toggle keys such as the Caps "
"Lock, Scroll Lock, and Num Lock. Unfortunately, though "
"toggling these three keys works correctly under NT, you "
"cannot use this function to toggle the Num Lock key under "
"Win95. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
120 RCDATA
begin
"win31wh.hlp\0"
"#114 WM_CTLCOLOR (2.x)\0"
"WM_CTLCOLOR \0"
"WM_CTLCOLOR (2.x)\0"
"WDJ SDK Annotation #114"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"The documentation incorrectly states that \042the return value "
"from this message has no effect on a button with the "
"BS_PUSHBUTTON or BS_DEFPUSHBUTTON style.\042 In fact, returning "
"a brush handle in response to this message appears to "
"determine the color of the pushbutton window background, "
"which is visible as the tiny areas in the corners of the "
"pushbutton window. Note that under Windows 95, pushbuttons "
"fill the entire client area of their windows, thus hiding "
"the window background from view. "
"\r\n"
"\r\n"
"Submitted by: Forest Wilkinson "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
121 RCDATA
begin
"win32.hlp\0"
"#115 GlobalDeleteAtom\0"
"GlobalDeleteAtom AND \042See also\042\0"
"GlobalDeleteAtom\0"
"WDJ SDK Annotation #115"
"\r\n"
"\r\n"
"The documentation for GlobalDeleteAtom states: "
"\r\n"
"\r\n"
" \042The only way to ensure that an atom has been deleted from the \r\n"
"atom table is to call this function repeatedly until it fails.\042 "
"\r\n"
"\r\n"
"Unfortunately, a 32-bit program running under Win NT 3.51 never fails, "
"making for an infinite loop (Windows 95 functions as documented). "
"Microsoft says this may be fixed in the next release (NT 4.0). "
"\r\n"
"\r\n"
"Submitted by Ken Brown "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
122 RCDATA
begin
"win32.hlp\0"
"#116 LB_ADDSTRING\0"
"LB_ADDSTRING AND \042See also\042\0"
"LB_ADDSTRING\0"
"WDJ SDK Annotation #116"
"\r\n"
"\r\n"
"If your listbox has the WS_HSCROLL style, and if you are "
"adding a string wider than the listbox, you may have to send "
"a LB_SETHORIZONTALEXTENT message to make the horizontal "
"scrollbar appear. The listbox does not automatically check "
"each newly added string and add the horizontal scrollbar "
"when a too-wide string is added or inserted. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
123 RCDATA
begin
"win32.hlp\0"
"#117 LB_DIR\0"
"LB_DIR AND \042See also\042\0"
"LB_DIR\0"
"WDJ SDK Annotation #117"
"\r\n"
"\r\n"
"If you pass a long filename to LB_DIR, it works "
"under NT 3.51, but fails under Win95 because it "
"relies on the 16-bit listbox which was not changed "
"to handle long filenames. You can avoid the error "
"by first translating the filename to a short filename "
"by calling GetShortPathName(). The LB_DIR will not "
"fail, but it will still display only the short versions "
"of any long filenames in the subdirectory. "
"\r\n"
"\r\n"
"Reference: Microsoft Knowledge Base article Q131286 "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
124 RCDATA
begin
"win32.hlp\0"
"#118 ReadFile\0"
"ReadFile AND \042See also\042\0"
"ReadFile\0"
"WDJ SDK Annotation #118"
"\r\n"
"\r\n"
"The documentation correctly points out that Win95 "
"does not support OVERLAPPED I/O. However, it incorrectly "
"states that you must pass a pointer to a structure of "
"type OVERLAPPED if the file was created (or opened) "
"with the flag FILE_FLAG_OVERLAPPED. In fact, if you "
"pass a pointer (rather than NULL) under Windows 95, "
"ReadFile() returns FALSE, and GetLastError() returns "
"ERROR_INVALID_PARAMETER, whether or not the file "
"was created/opened with the FILE_FLAG_OVERLAPPED "
"flag. That means that if you want to code a call "
"to ReadFile() that works correctly for both "
"synchronous and asynchronous I/O, you must detect "
"at runtime that you're running under Win95 and "
"treat that case differently. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
125 RCDATA
begin
"win32.hlp\0"
"#119 WinMain\0"
"WinMain AND \042See also\042\0"
"WinMain\0"
"WDJ SDK Annotation #119"
"\r\n"
"\r\n"
"Note that the string passed in lpCmdLine is not the same as "
"the string returned by GetCommandLine(). The string in "
"lpCmdLine contains the command line arguments only, but "
"GetCommandLine() returns the program name followed by the "
"arguments. "
"\r\n"
"\r\n"
"If you specify the following command: 'winword abc.doc', and "
"winword exists in d:\\msoffice\\winword.exe, lpCmdLine will "
"contain 'abc.doc', while GetCommandLine will return "
"'\042d:\\msoffice\\winword.exe\042 abc.doc' Note the double quotes "
"around the exe name. "
"\r\n"
"\r\n"
"Submitted by Phil Rodgers. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
126 RCDATA
begin
"win32.hlp\0"
"#119 GetCommandLine\0"
"GetCommandLine AND \042See also\042\0"
"GetCommandLine\0"
"WDJ SDK Annotation #119"
"\r\n"
"\r\n"
"Note that the string passed in the lpCmdLine parameter to "
"WinMain is not the same as the string returned by "
"GetCommandLine(). GetCommandLine() returns the complete "
"program name enclosed in double quotes, followed by the "
"arguments; whereas the lpCmdLine parameter of WinMain "
"contains the command line arguments only. "
"\r\n"
"\r\n"
"If you specify the following command: 'winword abc.doc', and "
"winword exists in d:\\msoffice\\winword.exe, lpCmdLine will "
"contain 'abc.doc', while GetCommandLine will return "
"'\042d:\\msoffice\\winword.exe\042 abc.doc' Note the double quotes "
"around the exe name. "
"\r\n"
"\r\n"
"Submitted by Phil Rodgers. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
127 RCDATA
begin
"win32.hlp\0"
"#120 ShellAbout\0"
"ShellAbout AND \042See also\042\0"
"ShellAbout\0"
"WDJ SDK Annotation #120"
"\r\n"
"\r\n"
"The documentation says that in Windows 95 ShellAbout will "
"prepend \042Microsoft Windows\042 to the title of the application. "
"This is not true. Actually, this function prepends only "
"\042Microsoft\042, so if your app is called \042MyApp\042, the title "
"will read \042Microsoft MyApp\042. "
"\r\n"
"\r\n"
"Submitted by Luis A. Ramos. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
128 RCDATA
begin
"mfc30.hlp\0"
"#121 CPropertySheet::SetTitle\0"
"SetTitle AND CPropertySheet\0"
"CPropertySheet::SetTitle\0"
"WDJ MFC Annotation #121"
"\r\n"
"\r\n"
"The parameters to this function are interchanged: it should "
"actually read: "
"\r\n"
"\r\n"
"void SetTitle (LPCTSTR lpszText, UINT nStyle); "
"\r\n"
"\r\n"
"Submitted by Margaret M. O'Connell. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
129 RCDATA
begin
"mfc30.hlp\0"
"#122 CCmdTarget::GetIDispatch\0"
"GetIDispatch AND CCmdTarget\0"
"CCmdTarget::GetIDispatch\0"
"WDJ MFC Annotation #122"
"\r\n"
"\r\n"
"The MFC 1.5x documentation incorrectly states that this "
"function takes no parameters. It should read: "
"\r\n"
"\r\n"
" LPDISPATCH GetIDispatch (BOOL bAddRef)\r\n"
" bAddRef - specifies whether to increment\r\n"
" the reference count for the object.\r\n"
"\r\n"
"This has been corrected in the MFC 4.0 documentation. "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
130 RCDATA
begin
"win31wh.hlp\0"
"#123 LB_SELECTSTRING\0"
"LB_SELECTSTRING\0"
"LB_SELECTSTRING\0"
"WDJ SDK Annotation #123"
"\r\n"
"\r\n"
"win31wh.hlp fails to mention that this message works only "
"with single select listboxes. For multi-select listboxes it "
"returns LB_ERR. "
"\r\n"
"\r\n"
"Submitted by Dino Esposito. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
131 RCDATA
begin
"win32.hlp\0"
"#124 AdjustWindowRect\0"
"AdjustWindowRect AND \042See also\042\0"
"AdjustWindowRect\0"
"WDJ SDK Annotation #124"
"\r\n"
"\r\n"
"The documentation for AdjustWindowRect() and "
"AdjustWindowRectEx() has a number of problems. "
"\r\n"
"\r\n"
"1. Though the documentation says that window titles and "
"borders are not taken into account, the function does "
"account for these styles. "
"\r\n"
"\r\n"
"2. Add 1 to the rect.bottom returned by this function. "
"There is a one-off error in the y direction. "
"\r\n"
"\r\n"
"3. The meaning of the rect parameter is not well explained. "
"The input to AdjustWindowRectEx is the window coordinates of "
"the top-left and bottom-right corners of the desired client "
"area. AdjustWindowRectEx inflates the specified rectangle "
"to include the caption, border and other non-client objects "
"specified by the style parameter. "
"\r\n"
"\r\n"
"\r\n"
"Reference: MSDN Dr.GUI #10 - Calculated Client Window Size. "
"\r\n"
"\r\n"
"Submitted by Etay Szekely. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
132 RCDATA
begin
"win32.hlp\0"
"#124 AdjustWindowRectEx\0"
"AdjustWindowRectEx AND \042See also\042\0"
"AdjustWindowRectEx\0"
"WDJ SDK Annotation #124"
"\r\n"
"\r\n"
"The documentation for AdjustWindowRect() and "
"AdjustWindowRectEx() has a number of problems. "
"\r\n"
"\r\n"
"1. Though the documentation says that window titles and "
"borders are not taken into account, they function does "
"account for these styles. "
"\r\n"
"\r\n"
"2. Add 1 to the rect.bottom returned by this function. "
"There is a one-off error in the y direction. "
"\r\n"
"\r\n"
"3. The meaning of the rect parameter is not well explained. "
"The input to AdjustWindowRectEx is the window coordinates of "
"the top-left and bottom-right corners of the desired client "
"area. AdjustWindowRectEx inflates the specified rectangle "
"to include the caption, border and other non-client objects "
"specified by the style parameter. "
"\r\n"
"\r\n"
"\r\n"
"Reference: MSDN Dr.GUI #10 - Calculated Client Window Size. "
"\r\n"
"\r\n"
"Submitted by Etay Szekely. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
133 RCDATA
begin
"mfc30.hlp\0"
"#125 CImageList::DeleteObject\0"
"DeleteObject AND \042See also\042 NOT HRESULT\0"
"CImageList::DeleteObject\0"
"WDJ MFC Annotation #125"
"\r\n"
"\r\n"
"VC++ 2.1 and 2.2 help files incorrectly documented this "
"function to delete image lists, while it actually never "
"existed. The correct function to delete an image list is "
"CImageList::DeleteImageList(); it returns non-zero if "
"successful and zero if it fails. "
"\r\n"
"\r\n"
"This error is corrected in the VC++ 4.0 documentation. "
"\r\n"
"\r\n"
"Submitted by Barry Tannenbaum. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
134 RCDATA
begin
"win32.hlp\0"
"#126 AVIFileOpen\0"
"AVIFileOpen AND \042See also\042\0"
"AVIFileOpen\0"
"WDJ SDK Annotation #126"
"\r\n"
"\r\n"
"The documentation specifies that using the OF_CREATE flag "
"will cause an existing file to be truncated to zero length. "
"In reality, it has no effect: the file length remains the "
"same, and the old data is intact once the file is closed. "
"\r\n"
"\r\n"
"Submitted by Tim Lesher. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
135 RCDATA
begin
"win31wh.hlp\0"
"#127 CBTProc\0"
"CBTProc\0"
"CBTProc\0"
"WDJ SDK Annotation #127"
"\r\n"
"\r\n"
"The CBTProc documentation fails to mention that you can "
"return 0 to allow the operation and 1 to prevent it for "
"HCBT_SETFOCUS notification also. The documentation has been "
"corrected in the Win32 help file. "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
136 RCDATA
begin
"win32.hlp\0"
"#128 GetDialogBaseUnits\0"
"GetDialogBaseUnits AND \042See also\042\0"
"GetDialogBaseUnits\0"
"WDJ SDK Annotation #128"
"\r\n"
"\r\n"
"GetDialogBaseUnits() does not return correct dialog base "
"units if the dialog is not using the system font. Use the "
"following function instead: "
"\r\n"
"\r\n"
" DWORD WDJ_GetDialogBaseUnits (HWND Dialog)\r\n"
" {\r\n"
" int BaseX, BaseY;\r\n"
" RECT R;\r\n"
" SetRect (&R, 0, 0, 4, 8);\r\n"
" MapDialogRect (Dialog, &R);\r\n"
" BaseX = R.right;\r\n"
" BaseY = R.bottom;\r\n"
" return (DWORD)MAKELONG (BaseX, BaseY);\r\n"
" }\r\n"
"\r\n"
"Reference: p54, January 1996 Windows Developer's Journal. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
137 RCDATA
begin
"win32.hlp\0"
"#129 GetShortPathName\0"
"GetShortPathName AND \042See also\042\0"
"GetShortPathName\0"
"WDJ SDK Annotation #129"
"\r\n"
"\r\n"
"The documentation fails to mention that this function returns an error "
"if the specified long path (first parameter) is invalid. "
"\r\n"
"\r\n"
"Submitted by Ken Brown. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
138 RCDATA
begin
"mfc30.hlp\0"
"#130 CCheckListBox::Create\0"
"CCheckListBox::Create AND \042See also\042\0"
"CCheckListBox::Create\0"
"WDJ MFC Annotation #130"
"\r\n"
"\r\n"
"The documentation mentions that the dwStyle parameter could be any "
"of the specified listbox styles. However, the dwStyle parameter should "
"NOT be LBS_MULTICOLUMN or LBS_USETABSTOPS. Morever, you need to specify "
"LBS_OWNERDRAWFIXED and LBS_HASSTRINGS. You can specify "
"LBS_OWNERDRAWVARIABLE instead of LBS_OWNERDRAWFIXED, but then you need to "
"override CCheckListBox::DrawItem, otherwise the debug version will ASSERT. "
"\r\n"
"\r\n"
"Submitted by Sudhir Menon. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
139 RCDATA
begin
"win32.hlp\0"
"#131 TBBUTTON\0"
"TBBUTTON AND \042See also\042\0"
"TBBUTTON\0"
"WDJ SDK Annotation #131"
"\r\n"
"\r\n"
"The structure is actually defined as follows in commctrl.h. Under Win32 "
"2 extra padding bytes are added. "
"\r\n"
"\r\n"
" typedef struct _TBBUTTON {\r\n"
" int iBitmap;\r\n"
" int idCommand;\r\n"
" BYTE fsState;\r\n"
" BYTE fsStyle;\r\n"
" #ifdef _WIN32\r\n"
" BYTE bReserved[2];\r\n"
" #endif\r\n"
" DWORD dwData;\r\n"
" int iString;\r\n"
" } TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON;\r\n"
" typedef const TBBUTTON FAR* LPCTBBUTTON;\r\n"
"\r\n"
"Submitted by Eric Heimburg. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
140 RCDATA
begin
"win32.hlp\0"
"#132 EM_POSFROMCHAR\0"
"EM_POSFROMCHAR AND \042See also\042\0"
"EM_POSFROMCHAR\0"
"WDJ SDK Annotation #132"
"\r\n"
"\r\n"
"The documentation for the wParam, lParam and return value is "
"completely wrong. It should be as follows: "
"\r\n"
"\r\n"
" wParam - address of point structure to retrieve the coordinates\r\n"
" lParam - zero based index of character\r\n"
" Return value - not used\r\n"
"\r\n"
"Reference: PSS Q137805 "
"\r\n"
"\r\n"
"Submitted by Fred Heidrich. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
141 RCDATA
begin
"win32.hlp\0"
"#133 EM_CHARFROMPOS\0"
"EM_CHARFROMPOS AND \042See also\042\0"
"EM_CHARFROMPOS\0"
"WDJ SDK Annotation #133"
"\r\n"
"\r\n"
"The documentation for the lParam and return value is wrong. It "
"should be as follows: "
"\r\n"
"\r\n"
" wParam - 0 (not used)\r\n"
" lParam - Specifies a pointer to a POINT structure that contains the\r\n"
"coordinates for the character position wanted. "
"\r\n"
" Return value - specifies the character index\r\n"
"\r\n"
"Reference: PSS Q137805 "
"\r\n"
"\r\n"
"Submitted by Fred Heidrich. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
142 RCDATA
begin
"mfc30.hlp\0"
"#134 CEdit::PosFromChar\0"
"CEdit::PosFromChar AND \042See also\042\0"
"CEdit::PosFromChar\0"
"WDJ MFC Annotation #134"
"\r\n"
"\r\n"
"The MFC wrapper internally calls the EM_POSFROMCHAR function passing "
"the documented values. Unfortunately, there is a documentation error in "
"EM_POSFROMCHAR, and therefore PosFromChar will not work correctly. "
"\r\n"
"\r\n"
"Read SDK Annotation #132 or PSS Q137805 for more details. "
"This error has been corrected in MFC 4.1 "
"\r\n"
"\r\n"
"\0\0\0\0"
end
143 RCDATA
begin
"mfc30.hlp\0"
"#135 CEdit::CharFromPos\0"
"CEdit::CharFromPos AND \042See also\042\0"
"CEdit::CharFromPos\0"
"WDJ MFC Annotation #135"
"\r\n"
"\r\n"
"The MFC wrapper internally calls the EM_CHARFROMPOS function passing "
"the documented values. Unfortunately, there is a documentation error in "
"EM_CHARFROMPOS, and therefore CharFromPos will not work correctly. "
"\r\n"
"\r\n"
"Read SDK Annotation #133 or PSS Q137805 for more details. "
"This error has been corrected in MFC 4.1 "
"\r\n"
"\r\n"
"\0\0\0\0"
end
144 RCDATA
begin
"win32.hlp\0"
"#136 BM_SETIMAGE\0"
"BM_SETIMAGE AND \042See also\042\0"
"BM_SETIMAGE\0"
"WDJ SDK Annotation #136"
"\r\n"
"\r\n"
"The documentation for wParam is incorrect. wParam actually specifies the "
"type of handle passed in lParam. It must be set either IMAGE_BITMAP or "
"IMAGE_ICON. "
"\r\n"
"\r\n"
"Also, this message will work only on buttons created with the "
"BS_BITMAP or BS_ICON style. "
"\r\n"
"\r\n"
"Reference: PSS Q125673 "
"\r\n"
"\r\n"
"Submitted by Paula Tomlinson. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
145 RCDATA
begin
"win31wh.hlp\0"
"#137 GetOpenFileName\0"
"GetOpenFileName\0"
"GetOpenFileName\0"
"WDJ SDK Annotation #137"
"\r\n"
"\r\n"
"In 16-bit Windows, if you call GetOpenFileName with a string buffer of 10 "
"and set nMaxFile to 10, and the user selected a file whose full path name "
"is 10 characters long, Windows appends a NULL character at the 11th byte "
"and returns the filename. This behaviour remains in Win95. "
"\r\n"
"\r\n"
"Therefore, if you set nMaxFile to n, specify a buffer of length n+1 before "
"calling this function. "
"\r\n"
"\r\n"
"Reference: March TechNet CD Q137194 "
"\r\n"
"\r\n"
"Submitted by: V.Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
146 RCDATA
begin
"win32.hlp\0"
"#137 GetOpenFileName\0"
"GetOpenFileName AND \042See also\042\0"
"GetOpenFileName\0"
"WDJ SDK Annotation #137"
"\r\n"
"\r\n"
"In 16-bit Windows, if you call GetOpenFileName with a string buffer of 10 "
"and set nMaxFile to 10, and the user selected a file whose full path name "
"is 10 characters long, Windows appends a NULL character at the 11th byte "
"and returns the filename. This behaviour remains in Win95. "
"\r\n"
"\r\n"
"Therefore, if you set nMaxFile to n, specify a buffer of length n+1 before "
"calling this function. "
"\r\n"
"\r\n"
"Reference: March TechNet CD Q137194 "
"\r\n"
"\r\n"
"Submitted by: V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
147 RCDATA
begin
"win32.hlp\0"
"#138 LB_DIR\0"
"LB_DIR AND \042See also\042\0"
"LB_DIR\0"
"WDJ SDK Annotation #138"
"\r\n"
"\r\n"
"Sending a LB_DIR message to a listbox that specifies a long filename in "
"the lParam returns LB_ERR in Windows 95, but works fine under Windows "
"NT 3.51 "
"\r\n"
"\r\n"
"In order to work around this bug, call GetShortPathName on the long "
"filename and pass the short filename to LB_DIR. "
"\r\n"
"\r\n"
"Reference: March TechNet CD Q131286 "
"\r\n"
"\r\n"
"Submitted by: V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
148 RCDATA
begin
"win31wh.hlp\0"
"#139 EM_SETSEL\0"
"EM_SETSEL\0"
"EM_SETSEL\0"
"WDJ SDK Annotation #139"
"\r\n"
"\r\n"
"The SDK documentation mentions that if wParam is 0, the caret is scrolled "
"into view, and if wParam is 1 it is not scrolled into view. However, "
"this parameter is not used for single line edit controls. "
"\r\n"
"\r\n"
"Also, the order of the start and end positions specified in the lParam "
"is not respected by single line edit controls. "
"\r\n"
"\r\n"
"Both wParam and lParam work as documented for multiline edit controls. "
"\r\n"
"\r\n"
"Reference: MSDN PSS Q102641, Q64758. "
"\r\n"
"\r\n"
"Submitted by: V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
149 RCDATA
begin
"win32.hlp\0"
"#140 STGM\0"
"STGM AND \042See also\042\0"
"STGM\0"
"WDJ SDK Annotation #140"
"\r\n"
"\r\n"
"The documentation fails to mention that for all storage and stream "
"creation functions, you HAVE to specify a share mode flag. For example, "
"a call to StgCreateDocfile with STGM_CREATE | STGM_READWRITE will fail; "
"while passing STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE will "
"work correctly. "
"\r\n"
"\r\n"
"Submitted by: V.Ramachandran. "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
150 RCDATA
begin
"win32.hlp\0"
"#141 WM_SETICON\0"
"WM_SETICON AND \042See also\042\0"
"WM_SETICON\0"
"WDJ SDK Annotation #141"
"\r\n"
"\r\n"
"Contrary to what the documentation says, Windows uses the small icon in "
"the window caption (including the caption of the minimized window). "
"Windows uses the large icon when you press Alt+Tab to switch to another "
"application. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
151 RCDATA
begin
"win31wh.hlp\0"
"#142 JournalRecordProc\0"
"JournalRecordProc\0"
"JournalRecordProc\0"
"WDJ SDK Annotation #142"
"\r\n"
"\r\n"
"lParam is incorrectly documented -- it actually points to a "
"EVENTMSG structure. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
152 RCDATA
begin
"win32.hlp\0"
"#143 GetDeviceCaps\0"
"GetDeviceCaps AND \042See also\042\0"
"GetDeviceCaps\0"
"WDJ SDK Annotation #143"
"\r\n"
"\r\n"
"The documentation fails to mention 2 additional values for the "
"index parameter: "
"\r\n"
"\r\n"
" SCALINGFACTORX - Scaling factor for the x-axis of a printer\r\n"
" SCALINGFACTORY - Scaling factor for the y-axis of a printer\r\n"
"\r\n"
"Also, GetDeviceCaps provides the following 6 indices in place of "
"printer Escapes: "
"\r\n"
"\r\n"
" Index for GetDeviceCaps Printer Escape Replaced\r\n"
" --------------------------------------------------------\r\n"
" PHYSICALWIDTH GETPHYSPAGESIZE\r\n"
" PHYSICALHEIGHT GETPHYSPAGESIZE\r\n"
" PHYSICALOFFSETX GETPRINTINGOFFSET\r\n"
" PHYSICALOFFSETY GETPRINTINGOFFSET\r\n"
" SCALINGFACTORX GETSCALINGFACTOR\r\n"
" SCALINGFACTORY GETSCALINGFACTOR\r\n"
"\r\n"
"Reference: MSDN Knowledge Base PSS Q125692 "
"\r\n"
"\r\n"
"Submitted by Sudhir Menon. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
153 RCDATA
begin
"win32.hlp\0"
"#144 MessageBoxIndirect\0"
"MessageBoxIndirect AND \042See also\042\0"
"MessageBoxIndirect\0"
"WDJ SDK Annotation #144"
"\r\n"
"\r\n"
"The documentation incorrectly mentions that this function returns a "
"BOOL value, and gives no description of it. In fact, the return value "
"is an int, and it has the same meaning as the return value for MessageBox. "
"\r\n"
"\r\n"
"Submitted by Phil Rodgers. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
154 RCDATA
begin
"win32.hlp\0"
"#145 LVM_EDITLABEL\0"
"LVM_EDITLABEL AND \042See also\042\0"
"LVM_EDITLABEL\0"
"WDJ SDK Annotation #145"
"\r\n"
"\r\n"
"Note that the listview control allows label editing "
"by creating a child edit control with an ID of IDOK. "
"That edit control will send notifications to the parent "
"of the listview control (e.g., your dialog box), so "
"if you have an \042OK\042 button with the same ID, do not "
"write code like this: "
"\r\n"
"\r\n"
" if(Command == IDOK)\r\n"
" EndDialog(Dialog, TRUE);\r\n"
"\r\n"
"since the first time the user edits a label, the dialog "
"will immediately disappear as though the user pressed "
"the \042OK\042 button. Instead, use code like this: "
"\r\n"
"\r\n"
" if(Command == IDOK && Code == BN_CLICKED)\r\n"
" EndDialog(Dialog, TRUE);\r\n"
"\r\n"
"\0\0\0\0"
end
155 RCDATA
begin
"win32.hlp\0"
"#146 TVN_ENDLABELEDIT\0"
"TVN_ENDLABELEDIT AND \042See also\042\0"
"TVN_ENDLABELEDIT\0"
"WDJ SDK Annotation #146"
"\r\n"
"\r\n"
"When editing labels in a TreeView control which is part of a dialog, "
"this notification is sent only if the user ends label editing using "
"the mouse (by clicking outside the edit control). Using the Enter and "
"Return keys do not work because the edit control does not handle the "
"WM_GETDLGCODE correctly, and therefore IsDialogMessage processes these "
"keys. "
"\r\n"
"\r\n"
"In order to make the TreeView control accept the changes when the user "
"presses Enter, and reject the changes on Escape, do the following: "
"\r\n"
"\r\n"
"1. In the TVN_BEGINLABELEDIT notification, get the edit contol handle "
"using TVM_GETEDITCONTROL. Subclass the edit control. "
"\r\n"
"\r\n"
"2. In the subclassed procedure, handle the WM_GETDLGCODE message and "
"return WM_WANTALLKEYS. "
"\r\n"
"\r\n"
"3. Handle the WM_CHAR message. When wParam is VK_ESCAPE, send a "
"TVM_ENDLABELEDITNOW message to the edit control with fCancel = TRUE. "
"When wParam is VK_RETURN, send TVM_ENDLABELEDITNOW with "
"fCancel = FALSE. All other WM_CHAR messages should be passed to the "
"default edit control procedure. "
"\r\n"
"\r\n"
"4. In the TVN_ENDLABELEDIT notification, remove the subclassing. "
"\r\n"
"\r\n"
"Reference: MSDN article PSS Q130691 "
"\r\n"
"\r\n"
"\0\0\0\0"
end
156 RCDATA
begin
"win31wh.hlp\0"
"#147 GetWindowTextLength\0"
"GetWindowTextLength\0"
"GetWindowTextLength\0"
"WDJ SDK Annotation #147"
"\r\n"
"\r\n"
"In Windows 3.1, calling GetWindowTextLength on a drop list "
"combo box (CBS_DROPDOWNLIST) incorrectly returns -1. "
"\r\n"
"\r\n"
"However in Win32 (for both 16 and 32 bit applications), "
"GetWindowTextLength returns the length of the string in the static "
"portion of the combo box. "
"\r\n"
"\r\n"
"Submitted by Sinisa Djurekovic. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
157 RCDATA
begin
"win32.hlp\0"
"#147 GetWindowTextLength\0"
"GetWindowTextLength AND \042See also\042\0"
"GetWindowTextLength\0"
"WDJ SDK Annotation #147"
"\r\n"
"\r\n"
"In Windows 3.1, calling GetWindowTextLength on a drop list "
"combo box (CBS_DROPDOWNLIST) incorrectly returns -1. "
"\r\n"
"\r\n"
"However in Win32 (for both 16 and 32 bit applications), "
"GetWindowTextLength returns the length of the string in the static "
"portion of the combo box. "
"\r\n"
"\r\n"
"Submitted by Sinisa Djurekovic. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
158 RCDATA
begin
"mfc30.hlp\0"
"#147 CWnd::GetWindowText\0"
"CWnd::GetWindowText AND CString AND Parameters\0"
"CWnd::GetWindowText\0"
"WDJ MFC Annotation #147"
"\r\n"
"\r\n"
"If you call GetWindowText (CString&) on a CWnd object which specifies a "
"Combo box with the CBS_DROPDOWNLIST style, you will get an assertion "
"in strcore.cpp. "
"\r\n"
"\r\n"
"This is because GetWindowText internally calls GetWindowTextLength. "
"Calling GetWindowTextLength on a drop list combo box (CBS_DROPDOWNLIST) "
"incorrectly returns -1, and MFC asserts because -1 is an invalid length "
"for a CString object. "
"\r\n"
"\r\n"
"Submitted by Sinisa Djurekovic. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
159 RCDATA
begin
"win32.hlp\0"
"#148 FindFirstFile\0"
"FindFirstFile AND \042See also\042\0"
"FindFirstFile\0"
"WDJ SDK Annotation #148"
"\r\n"
"\r\n"
"In Windows 95, the FindFirstFile() function interprets a wildcard (?) as "
"\042any character\042 instead of \042zero or one character,\042 as you would expect. "
"For example, if the files, TEMP.TXT and TEMPTEMP.TXT, are in the same "
"directory, using FindFirstFile (\042TEM?????.???\042, &findData) finds the "
"TEMPTEMP.TXT file, but not the TEMP.TXT file: "
"\r\n"
"\r\n"
"This function works correctly under Windows NT. "
"\r\n"
"\r\n"
"Reference: MSDN PSS ID No. Q130860 "
"\r\n"
"\r\n"
"\0\0\0\0"
end
160 RCDATA
begin
"win32.hlp\0"
"#149 CreateDirectoryEx\0"
"CreateDirectoryEx AND \042See also\042\0"
"CreateDirectoryEx\0"
"WDJ SDK Annotation #149"
"\r\n"
"\r\n"
"When you specify a template directory string with two back slashes (\\\\) "
"at the end of the string, CreateDirectoryEx returns FALSE indicating "
"error, even though the API successfully created the new directory. "
"GetLastError returns ERROR_INVALID_PARAMETER (87L). "
"\r\n"
"\r\n"
"Under Windows 95, passing \042c:\\\\\042 as the template directory (first "
"parameter) to CreateDirectoryEx will return FALSE, even if it "
"successfully created the new directory. "
"\r\n"
"\r\n"
"The function works correctly under Windows NT. "
"\r\n"
"\r\n"
"Reference: MSDN PSS ID No. Q140455 "
"\r\n"
" \r\n"
"\0\0\0\0"
end
161 RCDATA
begin
"mfc30.hlp\0"
"#150 CStatusBar::SetPaneText\0"
"CStatusBar::SetPaneText AND \042See also\042\0"
"CStatusBar::SetPaneText\0"
"WDJ MFC Annotation #150"
"\r\n"
"\r\n"
"Just calling CStatusBar::SetPaneText will not display the text in the "
"status bar pane. You need to add a UI update handler for the pane for the "
"text to appear correctly. "
"\r\n"
"\r\n"
"In order to set the text for pane index 4, and id ID_PANE_FOUR do: "
"\r\n"
" SetPaneText (4, \042Some text\042, TRUE);\r\n"
"and a UI handler in the message map as follows: "
"\r\n"
" ON_UPDATE_COMMAND_UI (ID_PANE_FOUR, OnUpdatePane)\r\n"
"and in the appropriate .cpp file add: "
"\r\n"
" void CMyClass::OnUpdatePane (CCmdUI *pCmdUI)\r\n"
" {\r\n"
" pCmdUI->Enable ();\r\n"
" }\r\n"
"\r\n"
"Reference: MSDN PSS No. Q109039 "
"\r\n"
"\r\n"
" \r\n"
"\0\0\0\0"
end
162 RCDATA
begin
"mfc30.hlp\0"
"#151 CRecordSet::Open\0"
"CRecordSet::Open\0"
"CRecordSet::Open\0"
"WDJ MFC Annotation #151"
"\r\n"
"\r\n"
"The documentation says that, for the param dwOptions, an enum "
"\042CRecordset::defaultOptions\042 can be specified, which will make the "
"recordset updatable. However, this enum is not defined. Use "
"\042CRecordset::none\042 instead. "
"\r\n"
"\r\n"
"Submitted by Nagendra R. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
163 RCDATA
begin
"win31wh.hlp\0"
"#152 EnumFontFamProc\0"
"EnumFontFamProc\0"
"EnumFontFamProc\0"
"WDJ SDK Annotation #152"
"\r\n"
"\r\n"
"The SDK documentation incorrectly mentions that the first parameter "
"lpnlf points to a NEWLOGFONT structure, which is not defined at all. "
"lpnlf actually points to a ENUMLOGFONT structure. "
"\r\n"
"\r\n"
"Reference: MSDN KB Q87975 "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
164 RCDATA
begin
"win32.hlp\0"
"#153 WM_CANCELMODE\0"
"WM_CANCELMODE AND \042See also\042\0"
"WM_CANCELMODE\0"
"WDJ SDK Annotation #153"
"\r\n"
"\r\n"
"The WM_CANCELMODE gets sent to the active window before another dialog or "
"message box is displayed. It is not sent to the focus window as the "
"documentation claims. "
"\r\n"
"\r\n"
"Therefore if a OK Button in Dialog 1 displays Dialog 2, Dialog 1 gets a "
"WM_CANCELMODE message and not the OK button, which should have been the "
"case as per the documentation. "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
165 RCDATA
begin
"win32.hlp\0"
"#154 CreateWindow\0"
"CreateWindow AND \042See also\042\0"
"CreateWindow\0"
"WDJ SDK Annotation #154"
"\r\n"
"\r\n"
"The documentation does not mention that static controls created with the "
"SS_SIMPLE style do not gray their text when they are disabled unlike "
"static controls without the SS_SIMPLE style. "
"\r\n"
"\r\n"
"Submitted by Nagendra R. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
166 RCDATA
begin
"mfc30.hlp\0"
"#155 CFileDialog::GetNextPathName\0"
"CFileDialog::GetNextPathName\0"
"CFileDialog::GetNextPathName\0"
"WDJ MFC Annotation #155"
"\r\n"
"\r\n"
"If you select multiple files in a root drive, GetNextPathName returns "
"strings with two back slashes '\\' after the drive letter. For example, if "
"you select the autoexec.bat and config.sys files from C:\\ using a multiple "
"selection file open dialog, GetNextPathName will return the strings: "
"\042c:\\\\autoexec.bat\042 and \042c:\\\\config.sys\042. This problem does not appear when "
"you select only one file. "
"\r\n"
"\r\n"
"A workaround would be to check the strings returned by GetNextPathName for "
"double back slashes, and remove them yourself. "
"\r\n"
"\r\n"
" CString sFile = dlg.GetNextPathName (pos);\r\n"
" #if _MFC_VER >= 0x0400\r\n"
" if ((sFile [1] == ':') && (sFile [2] == '\\\\') && (sFile [3] == '\\\\')) {\r\n"
" sFile = sFile.Left (3) + sFile.Right (sFile.GetLength () - 4);\r\n"
" }\r\n"
" #endif // end of MFC 4.x hack!\r\n"
"\r\n"
"Submitted by David Lowndes. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
167 RCDATA
begin
"mfc30.hlp\0"
"#156 CToolTipCtrl::GetToolInfo\0"
"CToolTipCtrl::GetToolInfo\0"
"CToolTipCtrl::GetToolInfo\0"
"WDJ MFC Annotation #156"
"\r\n"
"\r\n"
"The documentation incorrectly states that the first parameter should be "
"of type LPTOOLINFO. The function actually accepts a CToolInfo& (reference "
"to a undocumented CToolInfo class). If the call succeeds, the szText "
"parameter of the CToolInfo variable contains the tooltip text. "
"\r\n"
"\r\n"
"Submitted by Paul Stemper. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
168 RCDATA
begin
"mfc30.hlp\0"
"#157 CToolTipCtrl::AddTool\0"
"CToolTipCtrl::AddTool\0"
"CToolTipCtrl::AddTool\0"
"WDJ MFC Annotation #157"
"\r\n"
"\r\n"
"The documentation fails to mention that you cannot set a tooltip to a "
"static control using the AddTool function. "
"\r\n"
"\r\n"
"Submitted by Sudhir Menon. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
169 RCDATA
begin
"mfc30.hlp\0"
"#158 CTreeCtrl::GetNextVisibleItem\0"
"CTreeCtrl::GetNextVisibleItem\0"
"CTreeCtrl::GetNextVisibleItem\0"
"WDJ MFC Annotation #158"
"\r\n"
"\r\n"
"GetNextVisibleItem and GetPrevVisibleItem return the next "
"or previous item, not the next or previous visible item. "
"\r\n"
"\r\n"
"Submitted by Mark Gorokhov. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
170 RCDATA
begin
"mfc30.hlp\0"
"#158 CTreeCtrl::GetPrevVisibleItem\0"
"CTreeCtrl::GetPrevVisibleItem\0"
"CTreeCtrl::GetPrevVisibleItem\0"
"WDJ MFC Annotation #158"
"\r\n"
"\r\n"
"GetNextVisibleItem and GetPrevVisibleItem return the next "
"or previous item, not the next or previous visible item. "
"\r\n"
"\r\n"
"Submitted by Mark Gorokhov. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
171 RCDATA
begin
"mfc30.hlp\0"
"#159 CFontDialog::GetCurrentFont\0"
"CFontDialog::GetCurrentFont\0"
"CFontDialog::GetCurrentFont\0"
"WDJ MFC Annotation #159"
"\r\n"
"\r\n"
"Though the documentation mentions that you can call this function after "
"calling DoModal, the function incorrectly ASSERTS that its window handle "
"is not NULL. "
"\r\n"
"\r\n"
"Instead, use the public CFontDialog member variable m_lf. "
"\r\n"
"\r\n"
"Submitted by Tim Lesher. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
172 RCDATA
begin
"win32.hlp\0"
"#160 WM_MOVE\0"
"WM_MOVE AND \042See also\042\0"
"WM_MOVE\0"
"WDJ SDK Annotation #160"
"\r\n"
"\r\n"
"The SDK documentation tells you to use the following two lines to calculate "
"the x, and y positions of the window after it has been moved. "
"\r\n"
"\r\n"
" xPos = (int) LOWORD(lParam); // horizontal position\r\n"
" yPos = (int) HIWORD(lParam); // vertical position\r\n"
"\r\n"
"Though this worked fine in 16-bit Windows, it will fail for negative "
"coordinates in 32-bit Windows. Instead use the following two lines to "
"calculate the coordinates: "
"\r\n"
"\r\n"
" xPos = (int) (short)LOWORD(lParam); // horizontal position\r\n"
" yPos = (int)(short) HIWORD(lParam); // vertical position\r\n"
"\r\n"
"Submitted by Steven M. Kinney. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
173 RCDATA
begin
"mfc30.hlp\0"
"#161 CWnd::OnMove\0"
"CWnd::OnMove AND Parameters NOT LPRECT\0"
"CWnd::OnMove\0"
"WDJ MFC Annotation #161"
"\r\n"
"\r\n"
"MFC supplies LOWORD (lParam) and HIWORD (lParam) of the WM_MOVE message "
"for the x, and y parameters of this function, respectively. Since x and y "
"are defined as integers, you will get very large numbers for negative "
"coordinates. "
"\r\n"
"\r\n"
"Whenever you want to handle the WM_MOVE message, do the following: "
"1. Define a message handler: ON_MESSAGE (WM_MOVE, OnMyMove) in the message "
"\r\n"
" map.\r\n"
"2. Write the OnMyMove function as follows: "
"\r\n"
" LRESULT ClassName::OnMyMove (WPARAM, LPARAM lParam)\r\n"
" {\r\n"
" x = (int) (short)LOWORD(lParam); // horizontal position\r\n"
" y = (int)(short) HIWORD(lParam); // vertical position\r\n"
"\r\n"
" // Do your processing here ...\r\n"
"\r\n"
" return Default ();\r\n"
" }\r\n"
"\r\n"
"Submitted by Steven M. Kinney. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
174 RCDATA
begin
"mfc30.hlp\0"
"#162 CRecordset::Delete\0"
"CRecordset::Delete AND Remarks NOT Symptoms\0"
"CRecordset::Delete\0"
"WDJ MFC Annotation #162"
"\r\n"
"\r\n"
"This function is incorrectly documented as returning BOOL. It actually "
"returns void. "
"\r\n"
"\r\n"
"This documentation error has been corrected in MFC 4.x "
"\r\n"
"\r\n"
"Submitted by Tushar Bhatia. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
175 RCDATA
begin
"win32.hlp\0"
"#163 EM_GETLINE\0"
"EM_GETLINE AND \042See also\042\0"
"EM_GETLINE\0"
"WDJ SDK Annotation #163"
"\r\n"
"\r\n"
"When using this message under Win32s (1.30a and above) with "
"the RichEdit control, the parameters the message takes are: "
"\r\n"
"\r\n"
" wParam = 0;\r\n"
" lParam = &em32s;\r\n"
"\r\n"
"Where em32s is a structure defined as: "
"\r\n"
"\r\n"
" struct EM32S {\r\n"
" DWORD wParam;\r\n"
" DWORD lParam;\r\n"
" };\r\n"
"\r\n"
"The documented wParam and lParam values are stored in the "
"EM32S structure. "
"\r\n"
"\r\n"
"Submitted by Larry Widing. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
176 RCDATA
begin
"win32.hlp\0"
"#163 EM_LINEINDEX\0"
"EM_LINEINDEX AND \042See also\042\0"
"EM_LINEINDEX\0"
"WDJ SDK Annotation #163"
"\r\n"
"\r\n"
"When using this message under Win32s (1.30a and above) with "
"the RichEdit control, the parameters the message takes are: "
"\r\n"
"\r\n"
" wParam = 0;\r\n"
" lParam = &em32s;\r\n"
"\r\n"
"Where em32s is a structure defined as: "
"\r\n"
"\r\n"
" struct EM32S {\r\n"
" DWORD wParam;\r\n"
" DWORD lParam;\r\n"
" };\r\n"
"\r\n"
"The documented wParam and lParam values are stored in the "
"EM32S structure. "
"\r\n"
"\r\n"
"Submitted by Larry Widing. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
177 RCDATA
begin
"win32.hlp\0"
"#163 EM_LINELENGTH\0"
"EM_LINELENGTH AND \042See also\042\0"
"EM_LINELENGTH\0"
"WDJ SDK Annotation #163"
"\r\n"
"\r\n"
"When using this message under Win32s (1.30a and above) with "
"the RichEdit control, the parameters the message takes are: "
"\r\n"
"\r\n"
" wParam = 0;\r\n"
" lParam = &em32s;\r\n"
"\r\n"
"Where em32s is a structure defined as: "
"\r\n"
"\r\n"
" struct EM32S {\r\n"
" DWORD wParam;\r\n"
" DWORD lParam;\r\n"
" };\r\n"
"\r\n"
"The documented wParam and lParam values are stored in the "
"EM32S structure. "
"\r\n"
"\r\n"
"Submitted by Larry Widing. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
178 RCDATA
begin
"win32.hlp\0"
"#163 EM_LINESCROLL\0"
"EM_LINESCROLL AND \042See also\042\0"
"EM_LINESCROLL\0"
"WDJ SDK Annotation #163"
"\r\n"
"\r\n"
"When using this message under Win32s (1.30a and above) with the RichEdit "
"control, the parameters the message takes are: "
"\r\n"
"\r\n"
" wParam = 0;\r\n"
" lParam = &em32s;\r\n"
"\r\n"
"Where em32s is a structure defined as: "
"\r\n"
"\r\n"
" struct EM32S {\r\n"
" DWORD wParam;\r\n"
" DWORD lParam;\r\n"
" };\r\n"
"\r\n"
"The documented wParam and lParam values are stored in the EM32S structure. "
"\r\n"
"\r\n"
"Submitted by Larry Widing. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
179 RCDATA
begin
"win32.hlp\0"
"#164 EDITSTREAM\0"
"EDITSTREAM AND \042See also\042\0"
"EDITSTREAM\0"
"WDJ SDK Annotation #164"
"\r\n"
"\r\n"
"The return value from this function is incorrectly "
"documented. The return value from the EditStreamCallback is "
"interpreted as an SCODE - you should return 0 to indicate "
"success or an error code otherwise (both while reading and "
"writing). "
"\r\n"
"\r\n"
"Reference: MSDN KB article Q136810 "
"\r\n"
"\r\n"
"Submitted by Donald Munro. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
180 RCDATA
begin
"win31wh.hlp\0"
"#165 GetNextDlgGroupItem\0"
"GetNextDlgGroupItem\0"
"GetNextDlgGroupItem\0"
"WDJ SDK Annotation #165"
"\r\n"
"\r\n"
"The Win16 SDK fails to mention that this function ignores "
"controls that are part of the group but are disabled. The "
"documentation has been corrected in Win32. "
"\r\n"
"\r\n"
"If you use MFC, check out Annotation #166 (DDX_Radio) for "
"this bug's repercussions. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
181 RCDATA
begin
"mfc30.hlp\0"
"#166 DDX_Radio\0"
"DDX_Radio\0"
"DDX_Radio\0"
"WDJ MFC Annotation #166"
"\r\n"
"\r\n"
"DDX_Radio internally uses GetNextDlgGroupItem (see SDK "
"annotation #165) and therefore ignores disabled "
"radio-buttons. This could causes 2 radio buttons in the "
"same group to be selected, if a disabled radio-button is "
"selected. Generally, you are better off not using this "
"function if you are going to enable/disable radio-buttons. "
"Use the Windows SDK functions instead. This applies to MFC "
"1.x and 2.x. "
"\r\n"
"\r\n"
"Reference: MSDN KB Q114980 "
"\r\n"
"\r\n"
"\0\0\0\0"
end
182 RCDATA
begin
"win32.hlp\0"
"#167 CreatePen\0"
"CreatePen AND \042See also\042\0"
"CreatePen\0"
"WDJ SDK Annotation #167"
"\r\n"
"\r\n"
"If you specify a width greater than 1 for one of the the "
"following styles - PS_DASH, PS_DOT, PS_DASHDOT, "
"PS_DASHDOTDOT, CreatePen returns a pen with the specified "
"width but with the PS_SOLID style. "
"\r\n"
"\r\n"
"Submitted by Muthuvale Shanmugam. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
183 RCDATA
begin
"win32.hlp\0"
"#168 WindowFromPoint\0"
"WindowFromPoint AND \042See also\042\0"
"WindowFromPoint\0"
"WDJ SDK Annotation #168"
"\r\n"
"\r\n"
"If given a point over a static control, WindowFromPoint() "
"returns the handle of the window \042under\042 the static text control. "
"\r\n"
"\r\n"
"Submitted by Muthuvale Shanmugam. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
184 RCDATA
begin
"win32.hlp\0"
"#169 TranslateMessage\0"
"TranslateMessage AND \042See also\042\0"
"TranslateMessage\0"
"WDJ SDK Annotation #169"
"\r\n"
"\r\n"
"Though the documentation mentions that it returns TRUE only "
"if it translates message, it actually returns TRUE for all "
"WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN and WM_SYSKEYUP "
"messages. This behaviour is consistent with Windows 3.1 "
"\r\n"
"\r\n"
"Reference: MSDN KB Q137231 "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
185 RCDATA
begin
"win32.hlp\0"
"#170 LoadLibrary\0"
"LoadLibrary AND \042See also\042\0"
"LoadLibrary\0"
"WDJ SDK Annotation #170"
"\r\n"
"\r\n"
"When writing code for a Win32 DLL, you may be tempted to "
"use declare thread-local variables using Windows-specific "
"keywords like this: "
"\r\n"
"\r\n"
" __declspec(thread) int ThisThreadStatus;\r\n"
"\r\n"
"If you do, however, then the resulting DLL can only be "
"loaded implicitly (by linking with an import library). "
"If any program tries to use LoadLibrary() or LoadLibraryEx() "
"to load such a DLL, the call will fail and GetLastError() "
"will report a code of 1114L (DLL initialization failed), "
"even though your DLL's entry point never gets called. "
"\r\n"
"\r\n"
"The only work around is to simply not use __declspec(thread) "
"in your DLL. Either use the TlsXxxx() functions to allocate "
"thread-local storage, or use your own algorithm for associating "
"data with thread handles. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
186 RCDATA
begin
"win32.hlp\0"
"#171 GetLastError\0"
"GetLastError AND \042See also\042 NOT MAPIERROR\0"
"GetLastError\0"
"WDJ SDK Annotation #171"
"\r\n"
"\r\n"
"Some versions of the documentation for GetLastError() state "
"that a listing of the error codes is found in WINNT.H. The "
"list of error codes is actually found in the file "
"WINERROR.H. "
"\r\n"
"\r\n"
"Submitted by Katy Mulvey. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
187 RCDATA
begin
"win32.hlp\0"
"#172 WaitForMultipleObjects\0"
"WaitForMultipleObjects AND \042See also\042\0"
"WaitForMultipleObjects\0"
"WDJ SDK Annotation #172"
"\r\n"
"\r\n"
"The Windows 95 implementation of this function "
"has a bug (see the reference for a complete "
"explanation). If the same thread claims a mutex "
"more than once, then a second thread calls "
"WaitForMultipleObjects() to wait on that mutex and at "
"least one other object, WaitForMultipleObjects() will "
"incorrectly consider the mutex free when the other "
"objects being waited on become signaled. "
"\r\n"
"\r\n"
"Reference: p. 44, December 1996 Windows Developer's Journal "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
188 RCDATA
begin
"win32.hlp\0"
"#173 TBBUTTON\0"
"TBBUTTON AND \042See also\042\0"
"TBBUTTON\0"
"WDJ SDK Annotation #173"
"\r\n"
"\r\n"
"The documentation incorrectly claims that for "
"separators (fsStyle equal to TBSTYLE_SEP), the "
"idCommand field must be zero. In fact, you can "
"assign toolbar separators a non-zero ID. In fact, "
"it is important to assign unique IDs to separators "
"if they have non-default widths so the customization "
"features will work properly. Also, it's a common "
"technique to use a \042fat\042 separator as a placeholder "
"for a control (such as a drop-down listbox) that you "
"want to appear on the toolbox. You will need to "
"assign such separators a non-zero ID so that you "
"can locate the correct position for the control. "
"\r\n"
"\r\n"
"\r\n"
"Reference: p. 45, November 1996 Windows Developer's Journal "
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
189 RCDATA
begin
"win32.hlp\0"
"#174 WM_GETDLGCODE\0"
"WM_GETDLGCODE AND \042See also\042\0"
"WM_GETDLGCODE\0"
"WDJ SDK Annotation #174"
"\r\n"
"\r\n"
"\r\n"
"If a 32-bit control returns DLGC_HASSETSEL, Windows 95 will not send a "
"EM_SETSEL message when the control gets the focus. Instead, Windows 95 "
"sends the control a message with the same value as the 16-bit EM_SETSEL "
"(0x401) with 16-bit style parameters. Under Windows NT, your control "
"will get the normal 32-bit EM_SETSEL message. "
"\r\n"
"\r\n"
"Note: Under Win32, the EM_ messages start at 0xB0 and not at WM_USER "
"(0x400) as they did in Win16. "
"\r\n"
"\r\n"
"Submitted by Robert Mashlan. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
190 RCDATA
begin
"win32.hlp\0"
"#175 GetRegionData\0"
"GetRegionData AND \042See also\042\0"
"GetRegionData\0"
"WDJ SDK Annotation #175"
"\r\n"
"\r\n"
"The documentation for the return value is incorrect. If the "
"function succeeds and dwCount specifies an adequate number "
"of bytes, the return value is always dwCount. If the "
"function fails or if dwCount specifies less than adequate "
"number of bytes, the return value is 0. "
"\r\n"
"\r\n"
"Submitted by Peter C. Jahans. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
191 RCDATA
begin
"mfc30.hlp\0"
"#175 CRgn::GetRegionData\0"
"CRgn::GetRegionData\0"
"CRgn::GetRegionData\0"
"WDJ MFC Annotation #175"
"\r\n"
"\r\n"
"The documentation for the return value is incorrect. If the "
"function succeeds and dwCount specifies an adequate number "
"of bytes, the return value is always dwCount. If the "
"function fails or if dwCount specifies less than adequate "
"number of bytes, the return value is 0 (ERROR). "
"\r\n"
"\r\n"
"Submitted by Peter C. Jahans. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
192 RCDATA
begin
"win32.hlp\0"
"#176 DrawFocusRect\0"
"DrawFocusRect AND \042See also\042\0"
"DrawFocusRect\0"
"WDJ SDK Annotation #176"
"\r\n"
"\r\n"
"DrawFocusRect() works only in MM_TEXT mode. In other "
"modes, this function does not draw the focus rectangle "
"correctly, but it does NOT return error values! "
"\r\n"
"\r\n"
"Submitted by Jon-David Wiesman. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
193 RCDATA
begin
"mfc30.hlp\0"
"#176 CDC::DrawFocusRect\0"
"CDC::DrawFocusRect\0"
"CDC::DrawFocusRect\0"
"WDJ MFC Annotation #176"
"\r\n"
"\r\n"
"CDC::DrawFocusRect() works only in MM_TEXT mode. In other "
"modes, this function does not draw the focus rectangle "
"correctly, but it does NOT return error values! "
"\r\n"
"\r\n"
"Submitted by Jon-David Wiesman. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
194 RCDATA
begin
"win32.hlp\0"
"#177 FSCTL_DISMOUNT_VOLUME\0"
"FSCTL_DISMOUNT_VOLUME AND \042See also\042\0"
"FSCTL_DISMOUNT_VOLUME\0"
"WDJ SDK Annotation #177"
"\r\n"
"\r\n"
"The SDK documentation for this function mentions \042If the "
"specified volume is locked, the operation fails.\042 This is "
"incorrect. It should actually read \042If the specified volume "
"is locked by another process, the operation fails.\042 You must "
"do an FSCTL_LOCK_VOLUME before you can do an "
"FSCTL_DISMOUNT_VOLUME. "
"\r\n"
"\r\n"
"Also, in the sequence of events for reformatting FAT to NTFS "
"as described in the same article, steps 4 and 5 must be "
"switched - you need to dismount the volume before you unlock "
"the volume. "
"\r\n"
"\r\n"
"Submitted by Jeffrey S. Goldner. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
195 RCDATA
begin
"win32.hlp\0"
"#178 CreateProcess\0"
"CreateProcess AND \042See also\042\0"
"CreateProcess\0"
"WDJ SDK Annotation #178"
"\r\n"
"\r\n"
"If you call CreateProcess() with a dwCreationFlags value "
"which includes DEBUG_PROCESS, the call will fail under Win95 "
"when the debugee is a 16-bit app. "
"\r\n"
"\r\n"
"Submitted by Marc Cousineau. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
196 RCDATA
begin
"win32.hlp\0"
"#179 WM_ACTIVATE\0"
"WM_ACTIVATE AND \042See also\042\0"
"WM_ACTIVATE\0"
"WDJ SDK Annotation #179"
"\r\n"
"\r\n"
"The documentation states that the message is sent first to "
"the top-level window being deactivated and then to the "
"window being activated. This is incorrect in Win32. In "
"Win32, activation is asynchronous - the activating "
"application becomes active immediately and the messages to "
"the deactivating application occur later. "
"\r\n"
"\r\n"
"Reference: MSDN KB Article Q135785 "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
197 RCDATA
begin
"mfc30.hlp\0"
"#179 CWnd::OnActivate\0"
"CWnd::OnActivate\0"
"CWnd::OnActivate\0"
"WDJ MFC Annotation #179"
"\r\n"
"\r\n"
"The documentation states that first OnActivate() is called "
"for the main window being deactivated, and then for the main "
"window being activated This is incorrect in Win32. In "
"Win32, activation is asynchronous - the activating "
"application becomes immediately and the messages to the "
"deactivating application occur later. "
"\r\n"
"\r\n"
"Reference: MSDN KB Article Q135785 "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
198 RCDATA
begin
"win32.hlp\0"
"#180 DRAWITEMSTRUCT\0"
"DRAWITEMSTRUCT AND \042See also\042\0"
"DRAWITEMSTRUCT\0"
"WDJ SDK Annotation #180"
"\r\n"
"\r\n"
"Listviews always set the itemAction member to "
"ODA_DRAWENTIRE. You need to check the itemState member to "
"check if the focus or selection needs to be updated. "
"\r\n"
"\r\n"
"Reference: MSDN KB Article Q131788 "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
199 RCDATA
begin
"mfc30.hlp\0"
"#181 CInternetSession::ServiceTypeFromHandle\0"
"CInternetSession::ServiceTypeFromHandle\0"
"CInternetSession::ServiceTypeFromHandle\0"
"WDJ MFC Annotation #181"
"\r\n"
"\r\n"
"The on-line help states "
"CInternetSession::ServiceTypeFromHandle() returns the type "
"of service given the internet handle. Although this "
"function is declared in afxinet.h, it is not defined "
"anywhere. Using this function will cause your program to "
"fail at link time. "
"\r\n"
"\r\n"
"Submitted by Mario Contestabile. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
200 RCDATA
begin
"mfc30.hlp\0"
"#182 CHttpFile::QueryInfo\0"
"CHttpFile::QueryInfo\0"
"CHttpFile::QueryInfo\0"
"WDJ MFC Annotation #182"
"\r\n"
"\r\n"
"The documentation for CHttpFile::QueryInfo() erroneously states some of "
"the possible values for lpdwIndex and dwIndex: "
"\r\n"
"\r\n"
" HTTP_QUERY_LANGUAGE is actually HTTP_QUERY_CONTENT_LANGUAGE\r\n"
" HTTP_QUERY_ALLOWED_METHODS is actually HTTP_QUERY_ALLOW\r\n"
" HTTP_QUERY_PUBLIC_METHODS is actually HTTP_QUERY_PUBLIC\r\n"
"\r\n"
"(All #defines in wininet.h) "
"\r\n"
"\r\n"
"Submitted by Mario Contestabile. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
201 RCDATA
begin
"mfc30.hlp\0"
"#183 COleDateTime::GetYear\0"
"COleDateTime::GetYear\0"
"COleDateTime::GetYear\0"
"WDJ MFC Annotation #183"
"\r\n"
"\r\n"
"If the status of this COleDateTime object is not valid, the "
"return value is AFX_OLE_DATETIME_ERROR and not "
"AFX_DATETIME_ERROR as documented. This affects the following "
"member functions: GetYear(), GetMonth(), GetDay(), GetHour(), "
"GetMinute(), GetSecond(), GetDayOfWeek(), and GetDayOfYear(). "
"\r\n"
"\r\n"
"\r\n"
"Submitted by Mario Contestabile. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
202 RCDATA
begin
"win32.hlp\0"
"#184 ScrollWindowEx\0"
"ScrollWindowEx AND \042See also\042\0"
"ScrollWindowEx\0"
"WDJ SDK Annotation #184"
"\r\n"
"\r\n"
"If the prcClip parameter is NULL, no clipping is performed on the "
"scroll rectangle. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
203 RCDATA
begin
"win32.hlp\0"
"#185 WM_CONTEXTMENU\0"
"WM_CONTEXTMENU AND \042See also\042\0"
"WM_CONTEXTMENU\0"
"WDJ SDK Annotation #185"
"\r\n"
"\r\n"
"If the user uses the keyboard shortcut (Shift-F10 or the special "
"key on a Microsoft keyboard) to activate the context menu, the "
"xPos and yPos parameters are -1, -1. "
"\r\n"
"\r\n"
"Submitted by Katy Mulvey. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
204 RCDATA
begin
"win32.hlp\0"
"#186 GetLastError\0"
"GetLastError AND \042return values\042 AND parameters NOT S_OK\0"
"GetLastError\0"
"WDJ SDK Annotation #186"
"\r\n"
"\r\n"
"The Win32 Programmer's Reference documentation for "
"GetLastError() incorrectly states that a listing of the "
"error codes is found in WINNT.H. It is actually found in "
"the file WINERROR.H "
"\r\n"
"\r\n"
"Note: This error has been corrected in the Jan 97 MSDN. "
"\r\n"
"\r\n"
"Submitted by Katy Mulvey. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
205 RCDATA
begin
"win32.hlp\0"
"#187 CreateWindowEx\0"
"CreateWindowEx AND \042See also\042\0"
"CreateWindowEx\0"
"WDJ SDK Annotation #187"
"\r\n"
"\r\n"
"The documentation does not mention that you can call GetLastError "
"to get extended error information if the function fails. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
206 RCDATA
begin
"win32.hlp\0"
"#188 WM_SYSCOMMAND\0"
"WM_SYSCOMMAND AND \042See also\042\0"
"WM_SYSCOMMAND\0"
"WDJ SDK Annotation #188"
"\r\n"
"\r\n"
"If the wParam is SC_KEYMENU, the lParam contains the "
"character code of the key used in combination with the Alt "
"key to display the popup menu. For example, pressing Alt+F "
"to display the File popup will cause a WM_SYSCOMMAND with "
"wParam equal to SC_KEYMENU and lParam equal to 'f'. "
"\r\n"
"\r\n"
"Reference: MSDN Article ID Q92527. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
207 RCDATA
begin
"win32.hlp\0"
"#189 CreateWindow\0"
"CreateWindow AND \042See also\042\0"
"CreateWindow\0"
"WDJ SDK Annotation #189"
"\r\n"
"\r\n"
"For creating static controls with the SS_ICON style, you "
"need to specify the icon name in the lpWindowName parameter. "
"However, if you have an icon resource identified with a "
"numeric id (instead of a string), you need to specify #xxx "
"(where xxx is the numeric identifier for the ICON resource) "
"in the lpWindowName parameter. You should not use the "
"MAKEINTRESOURCE macro. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
208 RCDATA
begin
"win32.hlp\0"
"#189 CreateWindowEx\0"
"CreateWindowEx AND \042See also\042\0"
"CreateWindowEx\0"
"WDJ SDK Annotation #189"
"\r\n"
"\r\n"
"For creating static controls with the SS_ICON style, you "
"need to specify the icon name in the lpWindowName parameter. "
"However, if you have an icon resource identified with a "
"numeric id (instead of a string), you need to specify #xxx "
"(where xxx is the numeric identifier for the ICON resource) "
"in the lpWindowName parameter. You should not use the "
"MAKEINTRESOURCE macro. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
209 RCDATA
begin
"win32.hlp\0"
"#190 WM_GETTEXT\0"
"WM_GETTEXT AND \042See also\042\0"
"WM_GETTEXT\0"
"WDJ SDK Annotation #190"
"\r\n"
"\r\n"
"In Win32, you cannot send the WM_SETTEXT to a static control "
"with the SS_ICON style to set the icon. Therefore, you "
"should not use the WM_GETTEXT message to retrieve the icon "
"handle of static controls with the SS_ICON style. Use the "
"STM_SETICON and STM_GETICON messages instead. "
"\r\n"
"\r\n"
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
210 RCDATA
begin
"win32.hlp\0"
"#191 RegisterHotKey\0"
"RegisterHotKey AND \042See also\042\0"
"RegisterHotKey\0"
"WDJ SDK Annotation #191"
"\r\n"
"\r\n"
"If you want to disable task switching under Win32, you can "
"do so by registering hot keys for Ctrl+Esc and Alt+Tab. "
"\r\n"
"\r\n"
"Reference: MSDN Article ID Q125614 "
"Submitted by V. Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
211 RCDATA
begin
"win32.hlp\0"
"#192 CreateFile\0"
"CreateFile AND \042See also\042\0"
"CreateFile\0"
"WDJ SDK Annotation #192"
"\r\n"
"\r\n"
"Under Windows NT, when CreateFile is used with the "
"dwCreationDistribution parameter equal to CREATE_ALWAYS, "
"the call fails if the file exists and is hidden. "
"GetLastError() returns ERROR_ACCESS_DENIED. However, the "
"call succeeds under Windows 95 creating a new file that is "
"not hidden. "
"\r\n"
"\r\n"
"Submitted by Abdul Nizar. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
212 RCDATA
begin
"mfc30.hlp\0"
"#192 CFile::Open\0"
"CFile::Open\0"
"CFile::Open\0"
"WDJ MFC Annotation #192"
"\r\n"
"\r\n"
"Under Windows NT, if the nOpenFlags parameter is ORed with "
"CFile::modeCreate and not ORed with CFile::modeNoTruncate, "
"CFile::Open fails if the file exists and is hidden. However, "
"the call succeeds under Windows 95 creating a new file that "
"is not hidden. "
"\r\n"
"\r\n"
"Submitted by Abdul Nizar. "
"\r\n"
"\r\n"
"\r\n"
"\0\0\0\0"
end
213 RCDATA
begin
"mfc30.hlp\0"
"#193 CListCtrl::SetColumnWidth\0"
"CListCtrl::SetColumnWidth\0"
"CListCtrl::SetColumnWidth\0"
"WDJ MFC Annotation #193"
"\r\n"
"\r\n"
"The cx parameter is the new width of the column in listview "
"coordinates, or one of the following "
"\r\n"
"\r\n"
" LVSCW_AUTOSIZE Automatically sizes the column.\r\n"
" LVSCW_AUTOSIZE_USEHEADER Automatically sizes the column to \r\n"
" fit the header text\r\n"
"\r\n"
"Submitted by Ramon de Klein. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
214 RCDATA
begin
"win32.hlp\0"
"#194 PeekMessage\0"
"PeekMessage AND \042See also\042\0"
"PeekMessage\0"
"WDJ SDK Annotation #194"
"\r\n"
"\r\n"
"PeekMessage will always retrieve WM_QUIT messages, "
"irrespective of the setting of uMsgFilterMin and "
"uMsgFilterMax. "
"\r\n"
"\r\n"
"Submitted by Graham King. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
215 RCDATA
begin
"mfc30.hlp\0"
"#195 CWinApp::OnIdle\0"
"CWinApp::OnIdle\0"
"CWinApp::OnIdle\0"
"WDJ MFC Annotation #195"
"\r\n"
"\r\n"
"If you do not want OnIdle to be called whenever a "
"message is retrieved from the message queue, you can "
"override the IsIdleMessage. If an application has set "
"a very short timer or if the system is sending the "
"undocumented WM_SYSTIMER (0x118) message, then OnIdle "
"will be called repeatedly, and degrade performance. "
"\r\n"
"\r\n"
"Submitted by Adrian Pybus. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
216 RCDATA
begin
"mfc30.hlp\0"
"#196 CImageList::Create\0"
"CImageList::Create\0"
"CImageList::Create\0"
"WDJ MFC Annotation #196"
"\r\n"
"\r\n"
"The documentation for argument bMask is incorrect. In "
"fact this value is a UINT bitmask, and accepts "
"combinations of the following values: "
"\r\n"
"\r\n"
"ILC_MASK 0x0001 // ImageList has a mask "
"ILC_COLORDDB 0x00FE // use device dependent bitmap "
"ILC_COLOR4 0x0004 // use 4bpp DIBSection "
"ILC_COLOR8 0x0008 // use 8bpp DIBSection "
"ILC_COLOR16 0x0010 // use 16bpp DIBSection "
"ILC_COLOR24 0x0018 // use 24bpp DIBSection "
"ILC_COLOR32 0x0020 // use 32bpp DIBSection "
"ILC_PALETTE 0x0800 // use palette with image list "
"\r\n"
"\r\n"
"Refer to ImageList_Create for more information about "
"these flags. "
"\r\n"
"\r\n"
"Submitted by Frank Brown. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
217 RCDATA
begin
"win32.hlp\0"
"#197 NetServerDiskEnum\0"
"NetServerDiskEnum AND \042See also\042\0"
"NetServerDiskEnum\0"
"WDJ SDK Annotation #197"
"\r\n"
"\r\n"
"The Win32 documentation for NetServerDiskEnum is "
"incorrect on the following four points: "
"\r\n"
"\r\n"
" 1. The 'level' parameter has to be 0, and not 100 as documented.\r\n"
" 2. The function returns the enumerated disks as an array\r\n"
"of 3 character Unicode strings pointed to by the bufptr "
"parameter. "
"\r\n"
" 3. NetServerDiskEnum fails if its \042servername\042 argument \r\n"
"is a Win95 computer. "
"\r\n"
" 4. This function is available only on NT (Unicode only).\r\n"
"However, the header file (lmserver.h) declarations "
"specify LPTSTR for string parameters - they actually "
"require LPWSTR strings. "
"\r\n"
"\r\n"
"You would call this function as follows: "
"\r\n"
"\r\n"
" WCHAR (*pDrives)[3] = NULL;\r\n"
" ret = NetServerDiskEnum(\r\n"
" (LPTSTR)servername, \r\n"
" 0,\r\n"
" (LPBYTE *)(&pDrives),\r\n"
" 0,\r\n"
" &entriesRead,\r\n"
" &totalEntries,\r\n"
" &resumeHandle ) ;\r\n"
"\r\n"
"Submitted by Aaron J Margosis. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
218 RCDATA
begin
"win32.hlp\0"
"#198 StringFromGUID2\0"
"StringFromGUID2 AND \042See also\042\0"
"StringFromGUID2\0"
"WDJ SDK Annotation #198"
"\r\n"
"\r\n"
"The string received is enclosed by curly braces like "
"the following sample and not square braces as indicated "
"in the documentation. "
"{c200e360-38c5-11ce-ae62-08002b2b79ef} "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
219 RCDATA
begin
"win32.hlp\0"
"#199 GetUpdateRect\0"
"GetUpdateRect AND \042See also\042\0"
"GetUpdateRect\0"
"WDJ SDK Annotation #199"
"\r\n"
"\r\n"
"If the window was created with the CS_OWNDC style, "
"GetUpdateRect always retrieves the rectangle in "
"logical coordinates irrespective of the mapping mode. "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
220 RCDATA
begin
"win32.hlp\0"
"#200 BrowseCallbackProc\0"
"BrowseCallbackProc AND \042See also\042\0"
"BrowseCallbackProc\0"
"WDJ SDK Annotation #200"
"\r\n"
"\r\n"
"The documentation errs in the parameters for the "
"notifications: "
"BFFM_INITIALIZED: lParam is 0, lpData is the application "
"defined value specified in the BROWSEINFO structure. "
"BFFM_SELCHANGED: lParam points to the item identifier list "
"for the newly selected item, lpData is the application "
"defined value specified in the BROWSEINFO structure. "
"\r\n"
"\r\n"
"For the BFFM_ENABLEOK message, the lParam should be 0 "
"for disabling, and non-zero for enabling the OK button, "
"and not the wParam as documented. "
"\r\n"
"\r\n"
"Submitted by John Bates. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
221 RCDATA
begin
"win32.hlp\0"
"#201 SHBrowseForFolder\0"
"SHBrowseForFolder AND \042See also\042\0"
"SHBrowseForFolder\0"
"WDJ SDK Annotation #201"
"\r\n"
"\r\n"
"If the BIF_RETURNONLYFSDIRS flag is specified, the "
"OK button stays enabled for a \042\\\\computer\042 item, not "
"just the \042\\\\computer\\share\042 and directory items. "
"SHGetPathFromIDList() will fail if you pass it the "
"LPITEMIDLIST returned from SHBrowseForFolder when you "
"select just a computer name. "
"\r\n"
"\r\n"
"Submitted by John Bates. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
222 RCDATA
begin
"win32.hlp\0"
"#202 MoveWindow\0"
"MoveWindow AND \042See also\042\0"
"MoveWindow\0"
"WDJ SDK Annotation #202"
"\r\n"
"\r\n"
"If the bRepaint flag is FALSE, no repainting of any "
"kind occurs. The Remarks section is incorrect in saying "
"that a WM_PAINT message is placed in the message queue. "
"\r\n"
"\r\n"
"Submitted by V.Ramachandran. "
"\r\n"
"\r\n"
"\0\0\0\0"
end
223 RCDATA
begin
"win32.hlp\0"
"#203 WideCharToMultiByte\0"
"WideCharToMultiByte AND \042See also\042\0"
"WideCharToMultiByte\0"
"WDJ SDK Annotation #203"
"\r\n"
"\r\n"
"If the function succeeds, the return value is equal to "
"the string length plus the terminating NULL character. "
"If cchMultiByte specifies a value less than necessary, "
"the function returns 0, and GetLastError returns "
"ERROR_INSUFFICIENT_BUFFER. However, cchMultiByte "
"characters are copied to the buffer pointed to by "
"lpMultiByteStr. "
"\r\n"
"\r\n"
"\0\0\0\0"
end